home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BCI NET
/
BCI NET Dec 94.iso
/
archives
/
programming
/
c
/
gcc261ud-c.lha
/
gnu
/
src-patches
/
gcc-2.6.1-amiga.diffs
Wrap
Text File
|
1994-11-05
|
107KB
|
3,291 lines
diff -2rcN gcc-2.6.1/ChangeLog gcc-2.6.1-amiga/ChangeLog
*** gcc-2.6.1/ChangeLog Wed Nov 2 02:32:40 1994
--- gcc-2.6.1-amiga/ChangeLog Fri Nov 4 11:02:35 1994
***************
*** 2466,2469 ****
--- 2466,2476 ----
* fixincludes: Rework required loop to avoid crash on decstation.
+ Fri Aug 26 12:24:14 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * call.c (build_method_call) [PCC_STATIC_STRUCT_RETURN]: Also
+ accept an RTL_EXPR in what we're about to use for the instance,
+ since anything which would end up with pcc_struct_return set
+ inside cplus_expand_expr.
+
Thu Jul 14 09:42:23 1994 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
diff -2rcN gcc-2.6.1/Makefile.in gcc-2.6.1-amiga/Makefile.in
*** gcc-2.6.1/Makefile.in Fri Oct 28 23:00:38 1994
--- gcc-2.6.1-amiga/Makefile.in Fri Nov 4 11:02:36 1994
***************
*** 66,74 ****
SHELL = /bin/sh
# on sysV, define this as cp.
! INSTALL = install -c
# These permit overriding just for certain files.
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)
! SYMLINK = ln -s
MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
--- 66,77 ----
SHELL = /bin/sh
# on sysV, define this as cp.
! INSTALL = cp
# These permit overriding just for certain files.
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)
! SYMLINK = cp
! # Some systems don't support hardlinks. For this case, a simple copy
! # will achieve the same results for our purposes.
! HARDLINK = cp
MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
***************
*** 100,104 ****
# Target to use when installing include directory. Either
! # install-headers-tar or install-headers-cpio.
INSTALL_HEADERS_DIR = install-headers-tar
--- 103,107 ----
# Target to use when installing include directory. Either
! # install-headers-tar install-headers-cpio, or install-headers-cp.
INSTALL_HEADERS_DIR = install-headers-tar
***************
*** 106,110 ****
# Usually the one we just built.
# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
! GCC_FOR_TARGET = ./xgcc -B./
# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
--- 109,114 ----
# Usually the one we just built.
# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
! XGCC = xgcc
! GCC_FOR_TARGET = ./$(XGCC) -B./
# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
***************
*** 151,160 ****
# Common prefix for installation directories.
# NOTE: This directory must exist when you start installation.
! prefix = /usr/local
# Directory in which to put localized header files. On the systems with
# gcc as the native cc, `local_prefix' may not be `prefix' which is
# `/usr'.
# NOTE: local_prefix *should not* default from prefix.
! local_prefix = /usr/local
# Directory in which to put host dependent programs and libraries
exec_prefix = $(prefix)
--- 155,167 ----
# Common prefix for installation directories.
# NOTE: This directory must exist when you start installation.
! prefix = /gnu
# Directory in which to put localized header files. On the systems with
# gcc as the native cc, `local_prefix' may not be `prefix' which is
# `/usr'.
+ # Similar considerations apply for toolkits located on non-writable storage,
+ # such as CD-ROM, where we need a completely separate place to put local
+ # include files.
# NOTE: local_prefix *should not* default from prefix.
! local_prefix = /gnu
# Directory in which to put host dependent programs and libraries
exec_prefix = $(prefix)
***************
*** 622,626 ****
# Dump a specs file to make -B./ read these specs over installed ones.
! specs: xgcc
$(GCC_FOR_TARGET) -dumpspecs > specs
--- 629,633 ----
# Dump a specs file to make -B./ read these specs over installed ones.
! specs: xgcc xgccv
$(GCC_FOR_TARGET) -dumpspecs > specs
***************
*** 839,844 ****
# message from ar, we make sure all files are writable.
-(cd tmpcopy; chmod +w * > /dev/null 2>&1)
! (cd tmpcopy; $(AR) x ../$(LIBGCC2))
! (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o)
rm -rf tmpcopy
-if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
--- 846,852 ----
# message from ar, we make sure all files are writable.
-(cd tmpcopy; chmod +w * > /dev/null 2>&1)
! # The "cd..; wait" makes sure that the lock on tmpcopy has time to disappear.
! (cd tmpcopy; $(AR) x ../$(LIBGCC2); cd ..; /c/wait 2)
! (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o; cd ..; /c/wait 2)
rm -rf tmpcopy
-if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
***************
*** 912,919 ****
$(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
GCC_CFLAGS="$(GCC_CFLAGS)"
-rm -f libobjc.a
! ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
-if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
--- 920,927 ----
$(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
GCC_CFLAGS="$(GCC_CFLAGS)"
-rm -f libobjc.a
! cp objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
-if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
***************
*** 925,929 ****
$(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
GCC_CFLAGS="$(GCC_CFLAGS)"
--- 933,937 ----
$(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \
GCC_CFLAGS="$(GCC_CFLAGS)"
***************
*** 976,980 ****
ld: collect2
rm -f ld
! ln collect2 ld
collect2 : collect2.o version.o $(LIBDEPS)
--- 984,988 ----
ld: collect2
rm -f ld
! $(HARDLINK) collect2 ld
collect2 : collect2.o version.o $(LIBDEPS)
***************
*** 1491,1495 ****
cpp: cccp
-rm -f cpp
! ln cccp cpp
cccp: cccp.o cexp.o version.o $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
--- 1499,1503 ----
cpp: cccp
-rm -f cpp
! $(HARDLINK) cccp cpp
cccp: cccp.o cexp.o version.o $(LIBDEPS)
$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
***************
*** 1651,1655 ****
$(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
touch objc-headers
--- 1659,1663 ----
$(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
touch objc-headers
***************
*** 1832,1835 ****
--- 1840,1844 ----
-rm -fr stage1 stage2 stage3 stage4
-rm -f */stage1 */stage2 */stage3 */stage4 */include
+ -rm -f cp-parse.output
-rm -f objc-parse.output
-rm -f c-parse.output
***************
*** 1955,1959 ****
$(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
rm -f $(bindir)/$(target)-gcc-1; \
! ln $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
fi
--- 1964,1968 ----
$(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
rm -f $(bindir)/$(target)-gcc-1; \
! $(HARDLINK) $(bindir)/gcc $(bindir)/$(target)-gcc-1; \
mv $(bindir)/$(target)-gcc-1 $(bindir)/$(target)-gcc; \
fi
***************
*** 2031,2035 ****
if expr "$$dest" : "$$dir.*" > /dev/null; then \
rm -f $(libsubdir)/include/$$i; \
! ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
fi; \
done; \
--- 2040,2044 ----
if expr "$$dest" : "$$dir.*" > /dev/null; then \
rm -f $(libsubdir)/include/$$i; \
! $(HARDLINK) -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
fi; \
done; \
***************
*** 2054,2057 ****
--- 2063,2070 ----
(cd include; find . -print) | (cd include; cpio -pdum $(libsubdir)/include)
+ # Install the include directory using simple recursive copy.
+ install-headers-cp: stmp-headers install-include-dir
+ cd include; cp -r . $(libsubdir)/include
+
# Put assert.h where it won't override GNU libc's assert.h.
# It goes in a dir that is searched after GNU libc's headers;
***************
*** 2143,2147 ****
mkdir tmp/objc
for file in *[0-9a-zA-Z+]; do \
! ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
done
cd config; \
--- 2156,2160 ----
mkdir tmp/objc
for file in *[0-9a-zA-Z+]; do \
! $(HARDLINK) $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
done
cd config; \
***************
*** 2151,2160 ****
cd $$file; \
for subfile in *[0-9a-zA-Z+]; do \
! ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
|| cp $$subfile ../../tmp/config/$$file; \
done; \
cd ..; \
else \
! ln $$file ../tmp/config >/dev/null 2>&1 \
|| cp $$file ../tmp/config; \
fi; \
--- 2164,2173 ----
cd $$file; \
for subfile in *[0-9a-zA-Z+]; do \
! $(HARDLINK) $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
|| cp $$subfile ../../tmp/config/$$file; \
done; \
cd ..; \
else \
! $(HARDLINK) $$file ../tmp/config >/dev/null 2>&1 \
|| cp $$file ../tmp/config; \
fi; \
***************
*** 2166,2172 ****
cd objc; \
for file in *[0-9a-zA-Z+]; do \
! ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
done
! ln .gdbinit tmp
# Finish making `distdir', after the languages have done their thing.
--- 2179,2185 ----
cd objc; \
for file in *[0-9a-zA-Z+]; do \
! $(HARDLINK) $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
done
! $(HARDLINK) .gdbinit tmp
# Finish making `distdir', after the languages have done their thing.
***************
*** 2196,2210 ****
# THIS IS OBSOLETE; use the -srcdir operand in configure instead.
maketest:
! ln -s $(DIR)/*.[chy] .
! ln -s $(DIR)/configure .
! ln -s $(DIR)/*.def .
-rm -f =*
! ln -s $(DIR)/.gdbinit .
! ln -s $(DIR)/$(FIXINCLUDES) .
! -ln -s $(DIR)/bison.simple .
! ln -s $(DIR)/config .
! ln -s $(DIR)/move-if-change .
# The then and else were swapped to avoid a problem on Ultrix.
! if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi
-rm tm.h aux-output.c config.h md
make clean
--- 2209,2223 ----
# THIS IS OBSOLETE; use the -srcdir operand in configure instead.
maketest:
! $(SYMLINK) $(DIR)/*.[chy] .
! $(SYMLINK) $(DIR)/configure .
! $(SYMLINK) $(DIR)/*.def .
-rm -f =*
! $(SYMLINK) $(DIR)/.gdbinit .
! $(SYMLINK) $(DIR)/$(FIXINCLUDES) .
! -$(SYMLINK) $(DIR)/bison.simple .
! $(SYMLINK) $(DIR)/config .
! $(SYMLINK) $(DIR)/move-if-change .
# The then and else were swapped to avoid a problem on Ultrix.
! if [ ! -f Makefile ] ; then $(SYMLINK) $(DIR)/Makefile .; else false; fi
-rm tm.h aux-output.c config.h md
make clean
***************
*** 2222,2236 ****
# because alloca.o is newer, we permit these recursive makes to compile
# alloca.o. Then cc1 is newer, so it won't have to be relinked.
! $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap2: force
! $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap3: force
! $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
# Compare the object files in the current directory with those in the
--- 2235,2249 ----
# because alloca.o is newer, we permit these recursive makes to compile
# alloca.o. Then cc1 is newer, so it won't have to be relinked.
! $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap2: force
! $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
$(MAKE) stage2
! $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
bootstrap3: force
! $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
# Compare the object files in the current directory with those in the
***************
*** 2307,2311 ****
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
done
-mv $(STAGESTUFF) stage1
--- 2320,2324 ----
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi; \
done
-mv $(STAGESTUFF) stage1
***************
*** 2319,2323 ****
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
done
-mv $(STAGESTUFF) stage2
--- 2332,2336 ----
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi; \
done
-mv $(STAGESTUFF) stage2
***************
*** 2331,2335 ****
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
done
-mv $(STAGESTUFF) stage3
--- 2344,2348 ----
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi; \
done
-mv $(STAGESTUFF) stage3
***************
*** 2343,2347 ****
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
done
-mv $(STAGESTUFF) stage4
--- 2356,2360 ----
-for dir in . $(SUBDIRS) ; \
do \
! if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi; \
done
-mv $(STAGESTUFF) stage4
diff -2rcN gcc-2.6.1/calls.c gcc-2.6.1-amiga/calls.c
*** gcc-2.6.1/calls.c Mon Oct 17 23:03:19 1994
--- gcc-2.6.1-amiga/calls.c Fri Nov 4 11:02:37 1994
***************
*** 2169,2172 ****
--- 2169,2180 ----
argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
+ #if defined (__amigados__)
+ /* how would you do this RIGHT ?? fake a DECL node? dunno... */
+ #ifdef ENCODE_SECTION_INFO
+ /* mark it as a function (to be in the text section that is) */
+ SYMBOL_REF_FLAG (fun) = 1;
+ #endif
+ #endif
+
INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
diff -2rcN gcc-2.6.1/cccp.c gcc-2.6.1-amiga/cccp.c
*** gcc-2.6.1/cccp.c Tue Oct 25 22:37:44 1994
--- gcc-2.6.1-amiga/cccp.c Fri Nov 4 11:02:38 1994
***************
*** 40,43 ****
--- 40,59 ----
#endif /* not EMACS */
+ #ifdef amigados
+ /* Since cpp uses alloca to store all its read files, this is quite deadly
+ on a system with non-automatic stackgrowth like amigados, so we better
+ turn it off now. Normally alloca is #defined to __builtin_alloca, so
+ undefining it causes an external alloca to be used.
+
+ Note that it's not wise to generally inhibit __builtin_alloca, since
+ using the generic emulator entitels a serious (!) speed penalty, and
+ it's bad enough that we have to live with it in cccp, don't make cc1
+ unbearably slow as well... */
+
+ #undef alloca
+
+ static int amigados_abs_filename ();
+ #endif
+
#ifndef STANDARD_INCLUDE_DIR
#define STANDARD_INCLUDE_DIR "/usr/include"
***************
*** 366,369 ****
--- 382,392 ----
static int max_include_len;
+ #ifdef amigados
+ /* Phil.B: 03-Oct-94 Flag indicating process priority */
+ static int amiga_priority = -1;
+ #include <proto/exec.h>
+ struct Task *amiga_task;
+ #endif /* amigados */
+
/* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */
***************
*** 1338,1341 ****
--- 1361,1374 ----
case 'p':
+ #ifdef amigados
+ if (!strcmp (argv[i], "-priority")) {
+ if (i + 1 == argc)
+ fatal ("Priority missing after -P option");
+ if ((amiga_priority = atoi(argv[++i])) < -25)
+ amiga_priority = -25;
+ else if (amiga_priority > 25)
+ amiga_priority = 25;
+ } else
+ #endif /* amigados */
if (!strcmp (argv[i], "-pedantic"))
pedantic = 1;
***************
*** 1627,1630 ****
--- 1660,1670 ----
}
+ #ifdef amigados
+ Forbid();
+ amiga_task = FindTask(NULL);
+ Permit();
+ SetTaskPri(amiga_task, amiga_priority);
+ #endif /* amigados */
+
/* Add dirs from CPATH after dirs from -I. */
/* There seems to be confusion about what CPATH should do,
***************
*** 1989,1992 ****
--- 2029,2035 ----
/* Discard all directory prefixes from filename. */
+ #ifdef FILE_NAME_NONDIRECTORY
+ q = FILE_NAME_NONDIRECTORY (in_fname);
+ #else
if ((q = rindex (in_fname, '/')) != NULL
#ifdef DIR_SEPARATOR
***************
*** 1997,2001 ****
else
q = in_fname;
!
/* Copy remainder to mungable area. */
p = (char *) alloca (strlen(q) + 8);
--- 2040,2044 ----
else
q = in_fname;
! #endif
/* Copy remainder to mungable area. */
p = (char *) alloca (strlen(q) + 8);
***************
*** 3795,3799 ****
--- 3838,3847 ----
if (!no_output && already_output == 0
&& (kt->pass_thru
+ /* Phil.B 27-Mar-93 not quiet sure to keep this old fix */
+ #ifdef maybe_amigados
+ || ((kt->type == T_DEFINE || kt->type == T_UNDEF)
+ #else
|| (kt->type == T_DEFINE
+ #endif /* amigados */
&& (dump_macros == dump_names
|| dump_macros == dump_definitions)))) {
***************
*** 4137,4140 ****
--- 4185,4200 ----
#ifndef VMS
ep = rindex (nam, '/');
+
+ #ifdef amigados
+ /* amigados uses unix-style directory-filename separation, but
+ has VMS-style logicals as well */
+
+ if (ep == NULL)
+ {
+ ep = rindex (nam, ':');
+ /* a ':' is part of the directory name, a '/' isn't ! */
+ if (ep != NULL) ep++;
+ }
+ #endif /* amigados */
#else /* VMS */
ep = rindex (nam, ']');
***************
*** 4238,4242 ****
--- 4298,4306 ----
/* If specified file name is absolute, just open it. */
+ #ifndef amigados
if (*fbeg == '/') {
+ #else
+ if (amigados_abs_filename (fbeg, flen)) {
+ #endif
strncpy (fname, fbeg, flen);
fname[flen] = 0;
***************
*** 4261,4264 ****
--- 4325,4332 ----
continue;
strcpy (fname, searchptr->fname);
+
+ #ifdef amigados
+ if (fname[strlen (fname) - 1] != ':')
+ #endif
strcat (fname, "/");
fname[strlen (fname) + flen] = 0;
***************
*** 9972,9973 ****
--- 10040,10065 ----
}
#endif /* VMS */
+
+
+ #ifdef amigados
+
+ /* This function returns whether the LEN characters long filename FNAME
+ is an absolute path specification. */
+
+ static int
+ amigados_abs_filename (fname, len)
+ char *fname;
+ int len;
+ {
+ /* we're using ixemul.library, which treats `/foo' as `foo:', so
+ fname[0] is to be considered absolute as well */
+ if (fname[0] == '/')
+ return 1;
+
+ /* else do an index() on fname, but one which is limited to len characters */
+ while (*fname && *fname != ':' && len)
+ fname++, len--;
+
+ return *fname == ':';
+ }
+ #endif /* amigados */
diff -2rcN gcc-2.6.1/config/m68k/amigados.c gcc-2.6.1-amiga/config/m68k/amigados.c
*** gcc-2.6.1/config/m68k/amigados.c
--- gcc-2.6.1-amiga/config/m68k/amigados.c Fri Nov 4 11:02:39 1994
***************
*** 0 ****
--- 1,158 ----
+ /* Definitions of target machine for GNU compiler. amiga 68000/68020 version.
+ Copyright (C) 1992 Free Software Foundation, Inc.
+ Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ #include "m68k/m68k.c"
+
+ /* Does operand (which is a symbolic_operand) live in text space? If
+ so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.
+
+ This function is used in base relative code generation. */
+
+ int
+ read_only_operand (operand)
+ rtx operand;
+ {
+ if (GET_CODE (operand) == CONST)
+ operand = XEXP (XEXP (operand, 0), 0);
+ if (GET_CODE (operand) == SYMBOL_REF)
+ return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand);
+ return 1;
+ }
+
+
+ /* the rest of the file is to implement AmigaDOS specific keywords some day.
+ The approach used so far used __attribute__ for this, but this required
+ changes to c-parse.y as well as if we'd use the common keywords used
+ on commercial AmigaDOS C-compilers as well. So in the future I'll probably
+ switch to __saveds and __interrupt keywords as well.
+
+ The rest of this file is currently ignored, because it's no longer
+ working with the current gcc version. */
+
+ #if not_yet_working
+
+ #include "tree.h"
+
+ struct attribute {
+ tree ident;
+ int saveds : 1,
+ interrupt : 1;
+ };
+
+
+ static struct attribute *a_tab = 0;
+ static int a_index, a_size;
+
+ void
+ add_attr_entry (attr)
+ struct attribute *attr;
+ {
+ if (! a_tab)
+ {
+ a_size = 10;
+ a_index = 0;
+ a_tab = (struct attribute *) xmalloc (a_size * sizeof (struct attribute));
+ }
+
+ if (a_index == a_size)
+ {
+ a_size <<= 1;
+ a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute));
+ }
+
+ a_tab[a_index++] = *attr;
+ }
+
+
+ void
+ attr_do_saveds (function_ident)
+ tree function_ident;
+ {
+ struct attribute attr, *a;
+ int i;
+
+ for (i = 0, a = a_tab; i < a_index; i++, a++)
+ if (a->ident == function_ident)
+ {
+ a->saveds = 1;
+ return;
+ }
+
+ /* create a new entry for this function */
+ attr.ident = function_ident;
+ attr.saveds = 1;
+ attr.interrupt = 0;
+ add_attr_entry (&attr);
+ }
+
+ void
+ attr_do_interrupt (function_ident)
+ tree function_ident;
+ {
+ struct attribute attr, *a;
+ int i;
+
+ for (i = 0, a = a_tab; i < a_index; i++, a++)
+ if (a->ident == function_ident)
+ {
+ /* __interrupt implies __saveds */
+ a->saveds = 1;
+ a->interrupt = 1;
+ return;
+ }
+
+ /* create a new entry for this function */
+ attr.ident = function_ident;
+ attr.saveds = 1;
+ attr.interrupt = 1;
+ add_attr_entry (&attr);
+ }
+
+ int
+ attr_does_saveds (function_name)
+ char *function_name;
+ {
+ tree ident = get_identifier (function_name);
+ struct attribute *attr;
+ int i;
+
+ for (i = 0, attr = a_tab; i < a_index; i++, attr++)
+ if (attr->ident == ident)
+ return attr->saveds;
+
+ return 0;
+ }
+
+ int
+ attr_does_interrupt (function_name)
+ char *function_name;
+ {
+ tree ident = get_identifier (function_name);
+ struct attribute *attr;
+ int i;
+
+ for (i = 0, attr = a_tab; i < a_index; i++, attr++)
+ if (attr->ident == ident)
+ return attr->interrupt;
+
+ return 0;
+ }
+
+ #endif
diff -2rcN gcc-2.6.1/config/m68k/amigados.h gcc-2.6.1-amiga/config/m68k/amigados.h
*** gcc-2.6.1/config/m68k/amigados.h
--- gcc-2.6.1-amiga/config/m68k/amigados.h Fri Nov 4 11:02:40 1994
***************
*** 0 ****
--- 1,425 ----
+ /* Definitions of target machine for GNU compiler. amiga 68000/68020 version.
+ Copyright (C) 1992 Free Software Foundation, Inc.
+ Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ #include "m68k/m68k.h"
+
+ /* See m68k.h for bits in TARGET_DEFAULT.
+ 0 means 68000, no hardware fpu (68881/68882/68040).
+ 7 means 68020 (or higher) with hardware fpu. */
+
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT 0
+ #endif
+
+ /* Define __HAVE_68881__ in preprocessor according to the -m flags.
+ This will control the use of inline 68881 insns in certain macros.
+ Also inform the program which CPU this is for. */
+
+ #if TARGET_DEFAULT & 02
+
+ /* -m68881 is the default */
+ #define CPP_SPEC \
+ "%{!msoft-float:-D__HAVE_68881__ }\
+ %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{m68030:-Dmc68030}%{mc68030:-Dmc68030}%{m68040:-Dmc68040}\
+ %{mc68040:-Dmc68040}%{!mc68000:%{!m68000:-Dmc68020}}}"
+
+ #else
+
+ /* -msoft-float is the default, assume -mc68000 as well */
+ #define CPP_SPEC \
+ "%{m68881:-D__HAVE_68881__ }\
+ %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{m68030:-Dmc68030}%{mc68030:-Dmc68030}%{m68040:-Dmc68040}\
+ %{mc68040:-Dmc68040}%{!mc68020:%{!m68020:%{!mc68030:%{!m68030:%{!mc68040:%{!m68040:-Dmc68010}}}}}}}"
+
+ /* Don't try using XFmode since we don't have appropriate runtime software
+ support. */
+ #undef LONG_DOUBLE_TYPE_SIZE
+ #define LONG_DOUBLE_TYPE_SIZE 64
+
+ #endif
+
+ /* -m68000 requires special flags to the assembler. */
+
+ #if TARGET_DEFAULT & 01
+
+ #define ASM_SPEC \
+ "%{m68000:-mc68010}%{mc68000:-mc68010}%{mc68030:-mc68030}%{m68030:-mc68030}%{mc68040:-mc68040}%{m68040:-mc68040}\
+ %{!mc68000:%{!m68000:%{!mc68030:%{!m68030:%{!mc68040:%{!m68040:-mc68020}}}}}} %{msmall-code:-l}"
+
+ #else
+
+ #define ASM_SPEC \
+ "%{m68020:-mc68020}%{mc68020:-mc68020}%{mc68030:-mc68030}%{m68030:-mc68030}%{mc68040:-mc68040}\
+ %{m68040:-mc68040}%{!mc68020:%{!m68020:%{!mc68030:%{!m68030:%{!mc68040:%{!m68040:-mc68010}}}}}} %{msmall-code:-l}"
+
+ #endif
+
+ /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA
+ * was used before and is included for compatibility reasons */
+
+ #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA"
+
+ /* Choose the right startup file, depending on whether we use base relative
+ code, base relative code with automatic relocation (-resident), or plain
+ crt0.o.
+
+ Profiling is currently only available for plain startup.
+ mcrt0.o does not (yet) exist. */
+
+ #define STARTFILE_SPEC \
+ "%{!noixemul:%{resident:rcrt0.o%s}%{!resident:%{!fbaserel:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}\
+ %{fbaserel:%{pg:bgcrt0.o%s}%{!pg:%{p:bmcrt0.o%s}%{!p:bcrt0.o%s}}}}}\
+ %{noixemul:%{resident:libnix/nrcrt0.o%s}%{!resident:%{fbaserel:libnix/nbcrt0.o%s}%{!fbaserel:libnix/ncrt0.o%s}}}"
+
+ #define ENDFILE_SPEC "%{noixemul:-lstubs}"
+
+ /* Automatically search libamiga.a for AmigaDOS specific functions. Note
+ that we first search the standard C library to resolve as much as
+ possible from there, since it has names that are duplicated in libamiga.a
+ which we *don't* want from there. Then search the standard C library
+ again to resolve any references that libamiga.a might have generated.
+ This may only be a temporary solution since it might be better to simply
+ remove the things from libamiga.a that should be pulled in from libc.a
+ instead, which would eliminate the first reference to libc.a. */
+
+ #define LIB_SPEC "%{!noixemul:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}%{noixemul:-lnixmain -lnix -lamiga}"
+
+ /* if debugging, tell the linker to output amiga-hunk symbols *and* a BSD
+ compatible debug hunk (which will probably change in the future, it's not
+ tremendously useful in its current state). */
+
+ #define LINK_SPEC "%{noixemul:-shortdata -fl libnix} %{fbaserel:%{!resident:-databss-together -fl libb}}\
+ %{resident:-databss-together -datadata-reloc -fl libb} %{g:-amiga-debug-hunk}\
+ %{m68020:-fl libm020} %{m68030:-fl libm020} %{m68040:-fl libm020}"
+
+ #define CC1_SPEC "%{m68040:-mbitfield }%{mc68040:-mbitfield }%{resident:-fbaserel} "
+
+ #define CC1PLUS_SPEC "%{m68040:-mbitfield }%{mc68040:-mbitfield }%{resident:-fbaserel} "
+
+ /* Omit frame pointer at high optimization levels. (This doesn't hurt, since
+ GDB doesn't work under AmigaDOS at the moment anyway..) */
+
+ #define OPTIMIZATION_OPTIONS(OPTIMIZE) \
+ { \
+ if (OPTIMIZE >= 2) \
+ flag_omit_frame_pointer = 1; \
+ }
+
+ /* provide a dummy entry for the small-code switch. This is currently only
+ needed by the assembler (explanations: m68k.h), but will be used by cc1
+ to output 16bit pc-relative code later. */
+
+ #undef TARGET_SWITCHES
+ #define TARGET_SWITCHES \
+ { { "68020", 5}, \
+ { "c68020", 5}, \
+ { "68881", 2}, \
+ { "bitfield", 4}, \
+ { "68000", -5}, \
+ { "c68000", -5}, \
+ { "soft-float", -0102}, \
+ { "nobitfield", -4}, \
+ { "rtd", 8}, \
+ { "nortd", -8}, \
+ { "short", 040}, \
+ { "noshort", -040}, \
+ { "fpa", 0100}, \
+ { "nofpa", -0100}, \
+ { "sky", 0200}, \
+ { "nosky", -0200}, \
+ { "68040", 0407}, \
+ { "68030", -01400}, \
+ { "68030", 7}, \
+ { "68040-only", 01000}, \
+ { "small-code", 0 }, \
+ { "", TARGET_DEFAULT}}
+
+ /* Every structure or union's size must be a multiple of 2 bytes. */
+
+ #define STRUCTURE_SIZE_BOUNDARY 16
+
+ /* This is (almost;-)) BSD, so it wants DBX format. */
+
+ #define DBX_DEBUGGING_INFO
+
+ /* Allow folding division by zero. */
+ #define REAL_INFINITY
+
+ /* The following was hacked into final.c, to allow some notice of
+ * source line and filename to be injected into the assembly code,
+ * even if not using one of the "approved" debuggers (albaugh@agames.com).
+ */
+ #if 0
+ #define ASM_NOTE_SOURCE_LINE(FILE, LINE, FILENAME)\
+ fprintf(file,"*#line %d \"%s\"\n",(LINE),(FILENAME))
+ #endif
+
+ #if 0 /* This apparently is no longer necessary? */
+
+ /* This is how to output an assembler line defining a `double' constant. */
+
+ #undef ASM_OUTPUT_DOUBLE
+ #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \
+ { \
+ if (REAL_VALUE_ISINF (VALUE)) \
+ fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \
+ else if (isnan (VALUE)) \
+ { \
+ union { double d; long l[2];} t; \
+ t.d = (VALUE); \
+ fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \
+ } \
+ else \
+ fprintf (FILE, "\t.double 0r%.17g\n", VALUE); \
+ }
+
+ /* This is how to output an assembler line defining a `float' constant. */
+
+ #undef ASM_OUTPUT_FLOAT
+ #define ASM_OUTPUT_FLOAT(FILE,VALUE) \
+ { \
+ if (REAL_VALUE_ISINF (VALUE)) \
+ fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \
+ else if (isnan (VALUE)) \
+ { \
+ union { float f; long l;} t; \
+ t.f = (VALUE); \
+ fprintf (FILE, "\t.long 0x%lx\n", t.l); \
+ } \
+ else \
+ fprintf (FILE, "\t.single 0r%.9g\n", VALUE); \
+ }
+
+ /* This is how to output an assembler lines defining floating operands.
+ There's no way to output a NaN's fraction, so we lose it. */
+
+ #undef ASM_OUTPUT_FLOAT_OPERAND
+ #define ASM_OUTPUT_FLOAT_OPERAND(CODE,FILE,VALUE) \
+ do { \
+ if (CODE == 'f') \
+ { \
+ (REAL_VALUE_ISINF ((VALUE)) \
+ ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
+ : (VALUE) == -0.0 \
+ ? asm_fprintf (FILE, "%I0r-0.0") \
+ : asm_fprintf (FILE, "%I0r%.9g", (VALUE))) \
+ } else { \
+ long l; \
+ REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \
+ if (sizeof (int) == sizeof (long)) \
+ asm_fprintf ((FILE), "%I0x%x", l); \
+ else \
+ asm_fprintf ((FILE), "%I0x%lx", l); \
+ } \
+ } while (0)
+
+ #undef ASM_OUTPUT_DOUBLE_OPERAND
+ #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \
+ (REAL_VALUE_ISINF ((VALUE)) \
+ ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
+ : (VALUE) == -0.0 \
+ ? asm_fprintf (FILE, "%I0r-0.0") \
+ : asm_fprintf (FILE, "%I0r%.17g", (VALUE)))
+
+ #endif /* 0 */
+
+ /* use A5 as framepointer instead of A6, this makes A6 available as a
+ general purpose register, and can thus be used without problems in
+ direct library calls. */
+
+ #undef FRAME_POINTER_REGNUM
+ #define FRAME_POINTER_REGNUM 13
+ #undef ARG_POINTER_REGNUM
+ #define ARG_POINTER_REGNUM 13
+
+ /* we use A4 for this, not A5, which is the framepointer */
+ #undef PIC_OFFSET_TABLE_REGNUM
+ #define PIC_OFFSET_TABLE_REGNUM 12
+
+ /* setup a default shell return value for those (gazillion..) programs that
+ (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
+ cause the shell to randomly caugh upon executing such programs (contrary
+ to Unix, AmigaDOS scripts are terminated with an error if a program returns
+ with an error code above the `error' or even `failure' level
+ (which is configurable with the FAILAT command) */
+
+ #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
+
+ /* we do have an ansi-compliant c-library ;-) */
+ #define HAVE_VPRINTF
+ #define HAVE_VFPRINTF
+ #define HAVE_PUTENV
+ #define HAVE_STRERROR
+ #define HAVE_ATEXIT
+
+ /* given that symbolic_operand(X), return TRUE if no special
+ base relative relocation is necessary */
+
+ #define LEGITIMATE_BASEREL_OPERAND_P(X) \
+ (flag_pic >= 3 && read_only_operand (X))
+
+ #undef LEGITIMATE_PIC_OPERAND_P
+ #define LEGITIMATE_PIC_OPERAND_P(X) \
+ (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
+
+ /* Define this macro if references to a symbol must be treated
+ differently depending on something about the variable or
+ function named by the symbol (such as what section it is in).
+
+ The macro definition, if any, is executed immediately after the
+ rtl for DECL or other node is created.
+ The value of the rtl will be a `mem' whose address is a
+ `symbol_ref'.
+
+ The usual thing for this macro to do is to a flag in the
+ `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
+ name string in the `symbol_ref' (if one bit is not enough
+ information).
+
+ On the Amiga we use this to indicate if a symbol is in text or
+ data space. */
+
+ #define ENCODE_SECTION_INFO(DECL)\
+ do \
+ { \
+ if (TREE_CODE (DECL) == FUNCTION_DECL) \
+ SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \
+ else \
+ { \
+ rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \
+ ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \
+ if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl)) \
+ SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1; \
+ } \
+ } \
+ while (0)
+
+ #undef SELECT_RTX_SECTION
+ #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
+
+ /* according to varasm.c, RELOC referrs *only* to whether constants (!)
+ are addressed by address. This doesn't matter in baserelative code,
+ so we allow (inspite of flag_pic) readonly_data_section() in that
+ case */
+
+ #undef SELECT_SECTION
+ #define SELECT_SECTION(DECL, RELOC) \
+ { \
+ if (TREE_CODE (DECL) == STRING_CST) \
+ { \
+ if (! flag_writable_strings) \
+ readonly_data_section (); \
+ else \
+ data_section (); \
+ } \
+ else if (TREE_CODE (DECL) == VAR_DECL) \
+ { \
+ if ((flag_pic && flag_pic < 3 && RELOC) \
+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \
+ data_section (); \
+ else \
+ readonly_data_section (); \
+ } \
+ else \
+ readonly_data_section (); \
+ }
+
+
+
+ #if not_yet_working
+
+ /* starting support for amiga specific keywords
+ * --------------------------------------------
+ */
+
+ /* validate attributes that don't take a parameter. Currently we support
+ * __attribute__ (saveds) and __attribute__ (interrupt)
+ */
+ #define HANDLE_ATTRIBUTE0(attr) \
+ (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0)
+
+ /* (c-common.c)
+ * install additional attributes
+ */
+ #define HANDLE_EXTRA_ATTRIBUTES(a) \
+ if (TREE_VALUE (a) != 0 \
+ && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE \
+ && TREE_VALUE (a) == get_identifier ("saveds")) \
+ { \
+ if (TREE_CODE (decl) != FUNCTION_DECL) \
+ { \
+ warning_with_decl (decl, \
+ "saveds attribute specified for non-function `%s'"); \
+ return; \
+ } \
+ \
+ attr_do_saveds (DECL_NAME (decl)); \
+ } \
+ else if (TREE_VALUE (a) != 0 \
+ && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE \
+ && TREE_VALUE (a) == get_identifier ("interrupt")) \
+ { \
+ if (TREE_CODE (decl) != FUNCTION_DECL) \
+ { \
+ warning_with_decl (decl, \
+ "saveds attribute specified for non-function `%s'"); \
+ return; \
+ } \
+ \
+ attr_do_interrupt (DECL_NAME (decl)); \
+ } \
+
+
+ #define PROLOGUE_EXTRA_SAVE(mask) \
+ { extern char *current_function_name; \
+ /* saveds makes the function preserve d1/a0/a1 as well */ \
+ if (attr_does_saveds (current_function_name)) \
+ mask |= 0x40c0; } \
+
+
+ #define EPILOGUE_EXTRA_RESTORE(mask, nregs) \
+ { extern char *current_function_name; \
+ /* restore those extra registers */ \
+ if (attr_does_saveds (current_function_name)) \
+ { \
+ mask |= 0x0302; \
+ nregs += 3; \
+ } } \
+
+
+ #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream) \
+ { extern char *current_function_name; \
+ /* PLEASE Help! how is this done cleaner?? */ \
+ if (attr_does_saveds (current_function_name)) \
+ { \
+ fprintf (stderr, \
+ "warning: couldn't cleanup `saveds'-stack in `%s'.\n"); \
+ fprintf (stderr, \
+ " this is only ok, if the function never returns!\n"); \
+ } } \
+
+
+ #define EPILOGUE_EXTRA_TEST(stream) \
+ { extern char *current_function_name; \
+ /* with the interrupt-attribute, we have to set the cc before rts */ \
+ if (attr_does_interrupt (current_function_name)) \
+ asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); } \
+
+ #endif
diff -2rcN gcc-2.6.1/config/m68k/m68k.c gcc-2.6.1-amiga/config/m68k/m68k.c
*** gcc-2.6.1/config/m68k/m68k.c Sun Apr 17 00:16:27 1994
--- gcc-2.6.1-amiga/config/m68k/m68k.c Fri Nov 4 11:02:40 1994
***************
*** 51,56 ****
static rtx find_addr_reg ();
rtx legitimize_pic_address ();
!
!
/* Emit a (use pic_offset_table_rtx) if we used PIC relocation in the
function at any time during the compilation process. In the future
--- 51,56 ----
static rtx find_addr_reg ();
rtx legitimize_pic_address ();
! /* Phil.B 27-Oct-94 follows Jeffrey A Law patch (law@snake.cs.utah.edu) from 28-Feb-94 */
! #if 0
/* Emit a (use pic_offset_table_rtx) if we used PIC relocation in the
function at any time during the compilation process. In the future
***************
*** 62,69 ****
finalize_pic ()
{
! if (flag_pic && current_function_uses_pic_offset_table)
emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
}
!
/* This function generates the assembly code for function entry.
--- 62,69 ----
finalize_pic ()
{
! if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
}
! #endif
/* This function generates the assembly code for function entry.
***************
*** 142,146 ****
{
/* Adding negative number is faster on the 68040. */
! if (fsize + 4 < 0x8000)
{
/* asm_fprintf() cannot handle %. */
--- 142,147 ----
{
/* Adding negative number is faster on the 68040. */
!
! if (fsize + 4 < 0x8000)
{
/* asm_fprintf() cannot handle %. */
***************
*** 197,200 ****
--- 198,204 ----
num_saved_regs--;
}
+ #ifdef PROLOGUE_EXTRA_SAVE
+ PROLOGUE_EXTRA_SAVE (mask);
+ #endif
#if NEED_PROBE
***************
*** 230,234 ****
#endif
}
! if (flag_pic && current_function_uses_pic_offset_table)
{
#ifdef MOTOROLA
--- 234,238 ----
#endif
}
! if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
{
#ifdef MOTOROLA
***************
*** 295,298 ****
--- 299,305 ----
about which function the pc is in at this address. */
asm_fprintf (stream, "\tnop\n");
+ #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE
+ EPILOGUE_EXTRA_BARRIER_KLUDGE(stream);
+ #endif
return;
}
***************
*** 325,328 ****
--- 332,338 ----
mask |= 1 << regno;
}
+ #ifdef EPILOGUE_EXTRA_RESTORE
+ EPILOGUE_EXTRA_RESTORE(mask, nregs);
+ #endif
offset = foffset + nregs * 4;
if (offset + fsize >= 0x8000
***************
*** 529,532 ****
--- 539,545 ----
}
}
+ #ifdef EPILOGUE_EXTRA_TEST
+ EPILOGUE_EXTRA_TEST(stream);
+ #endif
if (current_function_pops_args)
asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
***************
*** 819,831 ****
if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
{
if (reg == 0)
abort ();
! pic_ref = gen_rtx (MEM, Pmode,
! gen_rtx (PLUS, Pmode,
! pic_offset_table_rtx, orig));
current_function_uses_pic_offset_table = 1;
RTX_UNCHANGING_P (pic_ref) = 1;
emit_move_insn (reg, pic_ref);
return reg;
}
--- 832,860 ----
if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
{
+ #ifdef LEGITIMATE_BASEREL_OPERAND_P
+ if (LEGITIMATE_BASEREL_OPERAND_P (orig))
+ return orig;
+ #endif
+
if (reg == 0)
abort ();
! if (flag_pic >= 3)
! pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig);
! else
! pic_ref = gen_rtx (MEM, Pmode,
! gen_rtx (PLUS, Pmode,
! pic_offset_table_rtx, orig));
!
! /* We could have a function which didn't use the GOT after RTL
! generation, but because of some action from a later pass
! (reload in particular) uses the GOT now. So emit both a USE
! insn and set regs_ever_live for the GOT register. */
current_function_uses_pic_offset_table = 1;
+ emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
+ regs_ever_live[REGNO (pic_offset_table_rtx)] = 1;
RTX_UNCHANGING_P (pic_ref) = 1;
emit_move_insn (reg, pic_ref);
+
return reg;
}
***************
*** 856,859 ****
--- 885,889 ----
/* Likewise, should we set special REG_NOTEs here? */
}
+
return pic_ref;
}
***************
*** 2168,2171 ****
--- 2198,2205 ----
if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
fprintf (file, ":l");
+ if ((flag_pic == 3) && (breg == pic_offset_table_rtx))
+ fprintf (file, ":W");
+ if ((flag_pic == 4) && (breg == pic_offset_table_rtx))
+ fprintf (file, ":L");
}
if (addr != 0 && ireg != 0)
diff -2rcN gcc-2.6.1/config/m68k/m68k.h gcc-2.6.1-amiga/config/m68k/m68k.h
*** gcc-2.6.1/config/m68k/m68k.h Sun Apr 10 12:10:37 1994
--- gcc-2.6.1-amiga/config/m68k/m68k.h Fri Nov 4 11:02:41 1994
***************
*** 262,269 ****
--- 262,271 ----
#define PIC_OFFSET_TABLE_REGNUM 13
+ #ifdef 0
/* Used to output a (use pic_offset_table_rtx) so that we
always save/restore a5 in functions that use PIC relocation
at *any* time during the compilation process. */
#define FINALIZE_PIC finalize_pic()
+ #endif
#ifndef SUPPORT_SUN_FPA
***************
*** 354,360 ****
#define CONDITIONAL_REGISTER_USAGE \
! { \
! if (flag_pic) \
! fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
}
--- 356,365 ----
#define CONDITIONAL_REGISTER_USAGE \
! { \
! if (flag_pic) \
! fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
! /* prevent saving/restoring of the base reg */ \
! if (flag_pic == 3) \
! call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
}
diff -2rcN gcc-2.6.1/config/m68k/m68k.md gcc-2.6.1-amiga/config/m68k/m68k.md
*** gcc-2.6.1/config/m68k/m68k.md Thu Sep 8 07:35:41 1994
--- gcc-2.6.1-amiga/config/m68k/m68k.md Fri Nov 4 11:02:42 1994
***************
*** 713,723 ****
if (flag_pic && symbolic_operand (operands[1], SImode))
{
! /* The source is an address which requires PIC relocation.
! Call legitimize_pic_address with the source, mode, and a relocation
! register (a new pseudo, or the final destination if reload_in_progress
! is set). Then fall through normally */
! extern rtx legitimize_pic_address();
! rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
! operands[1] = legitimize_pic_address (operands[1], SImode, temp);
}
}")
--- 713,728 ----
if (flag_pic && symbolic_operand (operands[1], SImode))
{
! #ifdef LEGITIMATE_BASEREL_OPERAND_P
! if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
! #endif
! {
! /* The source is an address which requires PIC relocation.
! Call legitimize_pic_address with the source, mode, and a relocation
! register (a new pseudo, or the final destination if reload_in_progress
! is set). Then fall through normally */
! extern rtx legitimize_pic_address();
! rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
! operands[1] = legitimize_pic_address (operands[1], SImode, temp);
! }
}
}")
***************
*** 1857,1862 ****
/* These insns can result from reloads to access
stack slots over 64k from the frame pointer. */
! if (GET_CODE (operands[2]) == CONST_INT
! && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
return \"move%.l %2,%0\;add%.l %1,%0\";
#ifdef SGS
--- 1862,1868 ----
/* These insns can result from reloads to access
stack slots over 64k from the frame pointer. */
! if (((GET_CODE (operands[2]) == CONST_INT
! && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
! || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
return \"move%.l %2,%0\;add%.l %1,%0\";
#ifdef SGS
***************
*** 4770,4774 ****
"
{
! if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
#ifdef MOTOROLA
SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
--- 4776,4780 ----
"
{
! if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
#ifdef MOTOROLA
SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
***************
*** 4785,4789 ****
;; Operand 1 not really used on the m68000.
! "! flag_pic"
"*
#ifdef MOTOROLA
--- 4791,4795 ----
;; Operand 1 not really used on the m68000.
! "(! flag_pic || flag_pic >= 3)"
"*
#ifdef MOTOROLA
***************
*** 4805,4809 ****
;; Operand 1 not really used on the m68000.
! "flag_pic"
"*
#ifdef MOTOROLA
--- 4811,4815 ----
;; Operand 1 not really used on the m68000.
! "(flag_pic && flag_pic < 3)"
"*
#ifdef MOTOROLA
***************
*** 4830,4834 ****
"
{
! if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
#ifdef MOTOROLA
SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
--- 4836,4840 ----
"
{
! if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
#ifdef MOTOROLA
SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
***************
*** 4845,4849 ****
(match_operand:SI 2 "general_operand" "g")))]
;; Operand 2 not really used on the m68000.
! "! flag_pic"
"*
#ifdef MOTOROLA
--- 4851,4855 ----
(match_operand:SI 2 "general_operand" "g")))]
;; Operand 2 not really used on the m68000.
! "(! flag_pic || flag_pic >= 3)"
"*
#ifdef MOTOROLA
***************
*** 4865,4869 ****
(match_operand:SI 2 "general_operand" "g")))]
;; Operand 2 not really used on the m68000.
! "flag_pic"
"*
#ifdef MOTOROLA
--- 4871,4875 ----
(match_operand:SI 2 "general_operand" "g")))]
;; Operand 2 not really used on the m68000.
! "(flag_pic && flag_pic < 3)"
"*
#ifdef MOTOROLA
diff -2rcN gcc-2.6.1/config/m68k/t-amigados gcc-2.6.1-amiga/config/m68k/t-amigados
*** gcc-2.6.1/config/m68k/t-amigados
--- gcc-2.6.1-amiga/config/m68k/t-amigados Fri Nov 4 11:02:42 1994
***************
*** 0 ****
--- 1,187 ----
+ # Makefile fragment for amigados target.
+
+ # We generate two additional things:
+ #
+ # libb/libgcc.a
+ # A base relative version of libgcc.a which is used when compiling and
+ # linking with the '-resident' option.
+ #
+ # xgccv
+ # A forking gcc instead of one calling ssytem(). This makes it less
+ # system conformant (can't ^C it when started from make), while providing
+ # increased functionality (-pipe option).
+
+ # Use the vfork'ing version of gcc by default, so that the -pipe option can
+ # get tested. To use the regular version just do "make XGCC=gcc". Note that
+ # PIPE is defined in x-amigados, so if we are doing a native build, it will
+ # be defined. It can be overridden with "make PIPE=".
+
+ XGCC = xgccv $(PIPE)
+ GCC_FOR_TARGET = ./$(XGCC) -B./
+
+ # Build residentable versions of the gcc executables by default. Use
+ # "make RESIDENT=" to build non-residentable versions.
+ # Note: This failed during bootstrapping of 2.5.5.
+
+ #RESIDENT = -resident
+
+ # The standard additional target flags for the compiler.
+
+ T_CFLAGS = $(RESIDENT)
+
+ # Allow the user to override the default target optimizations with gcc, or if
+ # the target compiler is not gcc and doesn't understand -O<N>.
+
+ T_OPTIMISE = -O2
+
+ # Each compilation environment (Manx, Dice, GCC, SAS/C, etc) provides its
+ # own equivalent of the UNIX /usr/include tree. For gcc, the standard headers
+ # are in /gnu/include and system specific headers are in /gnu/os-include.
+ # Use these paths for fixincludes.
+
+ SYSTEM_HEADER_DIR = /gnu/include
+ OTHER_FIXINCLUDES_DIRS = /gnu/os-include
+
+ # We don't need a libgcc1, it's all in ixemul.library
+
+ LIBGCC1 = libgcc1.null
+
+ # Flags to use when compiling the normal version of libgcc.a.
+ # Don't compile with debugging, as long as there is no debugger.
+ # Explicitly leave out the -resident compilation flag and don't use T_CFLAGS.
+
+ LIBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
+ $(CROSS_GCC_CFLAGS)
+
+ # Flags to use when compiling the base relative version of libgcc.a.
+ # Don't compile with debugging, as long as there is no debugger.
+ # Explicitly force -resident in the compilation flags and don't use T_CFLAGS.
+
+ LIBBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
+ $(CROSS_GCC_CFLAGS) -resident
+
+ # Build the base relative library.
+ # It is later copied into /gnu/lib/gcc-lib/amigados/<version>/libb/libgcc.a, whereas
+ # libgcc.a is copied into /gnu/lib/gcc-lib/amigados/<version>/libgcc.a.
+ # It doesn't work very well to define one of the EXTRA_* macros to contain
+ # libb/libgcc.a, particularly for doing "make stageN" or "make install".
+
+ GCC_PARTS=$(GCC_PASSES) libgcc.a libb/libgcc.a $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
+
+ # Add install_libbgcc to normal define of INSTALL_LIBGCC. Let install-gccv
+ # hitch a ride on here as well.
+
+ INSTALL_LIBGCC = install-libgcc install-libbgcc install-gccv
+
+ # This includes the knowledge that target amigados doesn't need libgcc1.a
+
+ libb/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \
+ $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
+ # Actually build it in tmplibbgcc.a, then rename at end,
+ # so that libb/libgcc.a itself remains nonexistent if compilation is aborted.
+ -rm -f tmplibbgcc.a
+ # -e causes any failing command to make this rule fail.
+ # -e doesn't work in certain shells, so we test $$? as well.
+ set -e; \
+ for name in $(LIB2FUNCS); \
+ do \
+ echo $${name}; \
+ $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
+ $(srcdir)/libgcc2.c -o $${name}.o; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
+ rm -f $${name}.o; \
+ done
+ # Some shells crash when a loop has no items.
+ # So make sure there is always at least one--`..'.
+ # Then ignore it.
+ # We don't use -e here because there are if statements
+ # that should not make the command give up when the if condition is false.
+ # Instead, we test for failure after each command where it matters.
+ -for file in .. $(LIB2FUNCS_EXTRA); \
+ do \
+ if [ x$${file} != x.. ]; then \
+ name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
+ echo $${name}; \
+ if [ $${name}.asm = $${file} ]; then \
+ cp $${file} $${name}.s || exit 1; file=$${name}.s; \
+ else true; fi; \
+ $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
+ rm -f $${name}.[so]; \
+ else true; \
+ fi; \
+ done
+ -if $(RANLIB_TEST) ; then $(RANLIB) tmplibbgcc.a; else true; fi
+ -if [ -d libb ] ; then true ; else mkdir libb ; fi
+ mv tmplibbgcc.a libb/libgcc.a
+
+
+ install-libbgcc: libb/libgcc.a install-dir
+ -if [ -d $(libsubdir)/libb ] ; then true ; else mkdir $(libsubdir)/libb ; fi
+ -if [ -f libb/libgcc.a ] ; then \
+ rm -f $(libsubdir)/libb/libgcc.a; \
+ $(INSTALL_DATA) libb/libgcc.a $(libsubdir)/libb/libgcc.a; \
+ if $(RANLIB_TEST) ; then \
+ (cd $(libsubdir)/libb; $(RANLIB) libgcc.a); else true; fi; \
+ chmod a-x $(libsubdir)/libb/libgcc.a; \
+ else true; fi
+
+
+ # The default gcc (xgcc) is built without -DAMIGADOS_FORK_GCC. This gcc (xgccv)
+ # is built with AMIGADOS_FORK_GCC defined, so that it can use '-pipe'. We
+ # don't want to define EXTRA_PASSES to xgccv because that will cause xgccv
+ # to be installed in $(libsubdir), so instead we use the default GCC_PASSES
+ # and add xgccv to it.
+
+ GCC_PASSES = xgcc xgccv cc1 cpp $(EXTRA_PASSES)
+
+ xgccv: xgccv.o version.o $(LIBDEPS)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgccv xgccv.o version.o $(LIBS)
+
+ xgccv.o: gcc.c $(CONFIG_H) config.status
+ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+ -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
+ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
+ -DDEFAULT_TARGET_VERSION=\"$(version)\" \
+ -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
+ -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
+ -DAMIGADOS_FORK_GCC \
+ -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o xgccv.o
+
+ install-gccv: xgccv
+ rm -f $(bindir)/gccv
+ $(INSTALL_PROGRAM) xgccv $(bindir)/gccv
+
+ # When making one of the stage<N> dirs, we need to make a libb subdir for
+ # it, and copy libbgcc.a there as libgcc.a.
+
+ EXTRA_STAGE1_TARGETS = stage1-libb
+ EXTRA_STAGE2_TARGETS = stage2-libb
+ EXTRA_STAGE3_TARGETS = stage3-libb
+ EXTRA_STAGE4_TARGETS = stage4-libb
+
+ stage1-libb:
+ -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
+ -if [ -d stage1/libb ] ; then true ; else mkdir stage1/libb ; fi
+ -cp libb/libgcc.a stage1/libb/libgcc.a
+ -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libgcc.a; else true; fi
+
+ stage2-libb:
+ -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
+ -if [ -d stage2/libb ] ; then true ; else mkdir stage2/libb ; fi
+ -cp libb/libgcc.a stage2/libb/libgcc.a
+ -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libgcc.a; else true; fi
+
+ stage3-libb:
+ -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
+ -if [ -d stage3/libb ] ; then true ; else mkdir stage3/libb ; fi
+ -cp libb/libgcc.a stage3/libb/libgcc.a
+ -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libgcc.a; else true; fi
+
+ stage4-libb:
+ -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
+ -if [ -d stage4/libb ] ; then true ; else mkdir stage4/libb ; fi
+ -cp libb/libgcc.a stage4/libb/libgcc.a
+ -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libgcc.a; else true; fi
diff -2rcN gcc-2.6.1/config/m68k/x-amigados gcc-2.6.1-amiga/config/m68k/x-amigados
*** gcc-2.6.1/config/m68k/x-amigados
--- gcc-2.6.1-amiga/config/m68k/x-amigados Fri Nov 4 11:02:42 1994
***************
*** 0 ****
--- 1,44 ----
+ # Note: It doesn't do any good to try to define prefix or local_prefix
+ # in the host overrides because configure will just change them back.
+ # You either have to give an appropriate option to configure or live with
+ # an Amiga specific patch to configure. See the note in configure. -fnf
+
+ # Building under amigados almost certainly requires an already working gcc.
+ # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
+ # work and get exercised. To bootstrap with the regular gcc just do
+ # "make CC=gcc". To bootstrap without "-pipe" do "make PIPE=".
+
+ CC = gccv $(PIPE)
+
+ # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with
+ # it. (fnf)
+ #PIPE = -pipe
+
+ # Allow the user to override the default host optimization with gcc, or if the
+ # host compiler is not gcc and doesn't understand -O<N>.
+
+ X_OPTIMIZE = -O2
+
+ # The standard additional host flags for the compiler.
+
+ X_CFLAGS = $(X_OPTIMIZE)
+
+ # Man pages get a wierd suffix...
+
+ manext = .0
+
+ # We really shouldn't specify CFLAGS from here, but there's no other way
+ # to get rid of the `-g' indoctrinated by Makefile.in. Note this becomes
+ # part of both the host compilation CFLAGS and the target compilation
+ # CFLAGS.
+
+ CFLAGS =
+
+ # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
+ # expects it, so just force it to true.
+
+ RANLIB_TEST = true
+
+ # My current version of ln doesn't work, so use cp instead. -fnf
+
+ HARDLINK = cp
diff -2rcN gcc-2.6.1/config/m68k/xm-amigados.h gcc-2.6.1-amiga/config/m68k/xm-amigados.h
*** gcc-2.6.1/config/m68k/xm-amigados.h
--- gcc-2.6.1-amiga/config/m68k/xm-amigados.h Fri Nov 4 11:02:43 1994
***************
*** 0 ****
--- 1,218 ----
+ /* Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS.
+ Copyright (C) 1992 Free Software Foundation, Inc.
+ Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ /* first include the generic header, then modify some parts.. */
+
+ #include "m68k/xm-m68k.h"
+
+ /* Amiga specific headers, such as from the Native Developer Update kits,
+ go in SYSTEM_INCLUDE_DIR. STANDARD_INCLUDE_DIR is the equivalent of
+ Unix "/usr/include". All other include paths are set in Makefile. */
+
+ #define SYSTEM_INCLUDE_DIR "/gnu/os-include"
+ #define STANDARD_INCLUDE_DIR "/gnu/include"
+
+ /* Fork one piped subcommand. SEARCH_FLAG is the system call to use
+ (either execv or execvp). ARGV is the arg vector to use.
+ NOT_LAST is nonzero if this is not the last subcommand
+ (i.e. its output should be piped to the next one.) */
+
+ #ifndef AMIGADOS_FORK_GCC
+
+ /* This version uses a more or less amigados-conformant way of running a
+ program (in the context of the parent). If you want to use -pipe however,
+ you'll have to use the vfork() version afterwards.
+ Phil.B: 29-May-94 quick hack (number 20 added to length) because xgcc
+ doesn't work.
+ */
+
+ #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
+ ({char *_argline; \
+ int _arglinelength, _i; \
+ \
+ for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i) \
+ _arglinelength += strlen(ARGV[_i]) + 1; \
+ \
+ _arglinelength += strlen(PROGRAM) + 20 + 1; \
+ \
+ if (!(_argline = (char *)alloca(_arglinelength))) \
+ pfatal_with_name ("alloca"); \
+ \
+ strcpy(_argline, PROGRAM); \
+ for (_i = 1; ARGV[_i]; ++_i) \
+ { \
+ strcat(_argline, " "); \
+ strcat(_argline, ARGV[_i]); \
+ } \
+ \
+ ssystem(_argline); }) \
+
+ #define PEXECUTE_RESULT(STATUS, COMMAND) \
+ ({ STATUS = COMMAND.pid; })
+
+ #else
+
+ /* the vfork() version. This one has the drawback, that gcc is not
+ interruptible when started from make, since ixemul.library doesn't yet
+ propagate ^C to subprocesses. */
+
+ #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
+ ({int (*_func)() = (SEARCH_FLAG ? execv : execvp); \
+ int _pid; \
+ int _pdes[2]; \
+ int _input_desc = last_pipe_input; \
+ int _output_desc = STDOUT_FILE_NO; \
+ int _retries, _sleep_interval, _result; \
+ \
+ /* If this isn't the last process, make a pipe for its output, \
+ and record it as waiting to be the input to the next process. */ \
+ \
+ if (NOT_LAST) \
+ { \
+ if (pipe (_pdes) < 0) \
+ pfatal_with_name ("pipe"); \
+ _output_desc = _pdes[WRITE_PORT]; \
+ last_pipe_input = _pdes[READ_PORT]; \
+ } \
+ else \
+ last_pipe_input = STDIN_FILE_NO; \
+ \
+ /* Fork a subprocess; wait and retry if it fails. */ \
+ _sleep_interval = 1; \
+ for (_retries = 0; _retries < 4; _retries++) \
+ { \
+ _pid = vfork (); \
+ if (_pid >= 0) \
+ break; \
+ sleep (_sleep_interval); \
+ _sleep_interval *= 2; \
+ } \
+ \
+ switch (_pid) \
+ { \
+ case -1: \
+ pfatal_with_name ("vfork"); \
+ /* NOTREACHED */ \
+ _result = 0; \
+ break; \
+ \
+ case 0: /* child */ \
+ /* Move the input and output pipes into place, if nec. */ \
+ if (_input_desc != STDIN_FILE_NO) \
+ { \
+ close (STDIN_FILE_NO); \
+ dup (_input_desc); \
+ close (_input_desc); \
+ } \
+ if (_output_desc != STDOUT_FILE_NO) \
+ { \
+ close (STDOUT_FILE_NO); \
+ dup (_output_desc); \
+ close (_output_desc); \
+ } \
+ \
+ /* Close the parent's descs that aren't wanted here. */ \
+ if (last_pipe_input != STDIN_FILE_NO) \
+ close (last_pipe_input); \
+ \
+ /* Exec the program. */ \
+ (*_func) (PROGRAM, ARGV); \
+ perror_exec (PROGRAM); \
+ exit (-1); \
+ /* NOTREACHED */ \
+ _result = 0; \
+ break; \
+ \
+ default: \
+ /* In the parent, after forking. \
+ Close the descriptors that we made for this child. */ \
+ if (_input_desc != STDIN_FILE_NO) \
+ close (_input_desc); \
+ if (_output_desc != STDOUT_FILE_NO) \
+ close (_output_desc); \
+ \
+ /* Return child's process number. */ \
+ _result = _pid; \
+ break; \
+ } \
+ _result; }) \
+
+ #define PEXECUTE_RESULT(STATUS, COMMAND) \
+ ({ wait (& STATUS); })
+
+ #endif /* AMIGADOS_FORK_GCC */
+
+ /* the following macros are stolen more or less from xm-vms.h ... */
+
+ /* This macro is used to help compare filenames in cp-lex.c.
+
+ We also need to make sure that the names are all lower case, because
+ we must be able to compare filenames to determine if a file implements
+ a class. */
+
+ #define FILE_NAME_NONDIRECTORY(C) \
+ ({ \
+ extern char *rindex(); \
+ char * pnt_ = (C), * pnt1_; \
+ pnt1_ = pnt_ - 1; \
+ while (*++pnt1_) \
+ if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20; \
+ pnt1_ = rindex (pnt_, '/'); \
+ pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_); \
+ (pnt1_ == 0 ? pnt_ : pnt1_ + 1); \
+ })
+
+ /* Macro to generate the name of the cross reference file. The standard
+ one does not work, since it was written assuming that the conventions
+ of a unix style filesystem will work on the host system.
+
+ Contrary to VMS, I'm using the original unix filename, there's no reason
+ not to use this under AmigaDOS. */
+
+ #define XREF_FILE_NAME(BUFF, NAME) \
+ s = FILE_NAME_NONDIRECTORY (NAME); \
+ if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME); \
+ else { \
+ unsigned char ch = *s; /* could be Latin1 char.. */ \
+ /* temporary: cut the filename from the directory */\
+ *s = 0; \
+ sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1); \
+ /* and restore the filename */ \
+ *s = ch; \
+ } \
+
+ /* Macro that is used in cp-xref.c to determine whether a file name is
+ absolute or not.
+
+ This checks for both, '/' as first character, since we're running under
+ ixemul.library which provides for this unix'ism, and for the usual
+ logical-terminator, ':', somewhere in the filename. */
+
+ #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':'))
+
+ /* the colon conflicts with the name space of logicals */
+
+ #define PATH_SEPARATOR ','
+
+ /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2)
+ hacks. It's actually the inverse case as on Unix. rename(2) was always
+ there, link(2) is new with OS 2.0 */
+
+ #define HAVE_rename 1
diff -2rcN gcc-2.6.1/configure gcc-2.6.1-amiga/configure
*** gcc-2.6.1/configure Thu Oct 27 17:15:04 1994
--- gcc-2.6.1-amiga/configure Fri Nov 4 11:02:43 1994
***************
*** 5,8 ****
--- 5,12 ----
#This file is part of GNU CC.
+ # AmigaDOS Notes: Where "echo" can be invoked with a first arg that
+ # starts with '-', run the external echo instead, since the pdksh builtin
+ # version botches this case.
+
#GNU CC is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
***************
*** 47,52 ****
# Default --srcdir to the directory where the script is found,
# if a directory was specified.
! # The second sed call is to convert `.//configure' to `./configure'.
! srcdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'`
if [ x$srcdir = x$0 ]
then
--- 51,58 ----
# Default --srcdir to the directory where the script is found,
# if a directory was specified.
! # The first sed call works around a bug in the AmigaDOS port of sksh, where
! # $0 has a trailing slash appended to it. It is a NOP for other systems.
! # The third sed call is to convert `.//configure' to `./configure'.
! srcdir=`echo $0 | sed 's|/$||' | sed 's|//|/|' | sed 's|/[^/]*$||'`
if [ x$srcdir = x$0 ]
then
***************
*** 56,69 ****
host=
! # Default prefix to /usr/local.
! prefix=/usr/local
! # local_prefix specifies where to find the directory /usr/local/include
# We don't use $(prefix) for this
! # because we always want GCC to search /usr/local/include
! # even if GCC is installed somewhere other than /usr/local.
# Think THREE TIMES before specifying any other value for this!
# DO NOT make this use $prefix!
! local_prefix=/usr/local
# Default is to let the Makefile set exec_prefix from $(prefix)
exec_prefix='$(prefix)'
--- 62,85 ----
host=
! # Note: For AmigaDOS we want this to default to /gnu unless we specify
! # otherwise to configure. We also don't want to have to remember to always
! # configure with "--prefix=/gnu". Changing it in Makefile.in or in
! # config/m68k/x-amigados is ineffective since configure will always change
! # it back in the final generated Makefile, so we have to go to the root of
! # the problem, which is here. There should be a way to do this in the
! # individual machine configuration files! -fnf
! # here. -fnf
! # Default prefix to "/gnu".
! prefix=/gnu
! # local_prefix specifies where to find the directory /gnu/local/include
# We don't use $(prefix) for this
! # because we always want GCC to search /gnu/local/include
! # even if GCC is installed somewhere other than /gnu/local.
# Think THREE TIMES before specifying any other value for this!
# DO NOT make this use $prefix!
! # Note: See AmigaDOS note above for this AmigaDOS specific change. -fnf
! # NoteII:We don't want to have yet-another-assign so we use /gnu/local
! local_prefix=/gnu/local
# Default is to let the Makefile set exec_prefix from $(prefix)
exec_prefix='$(prefix)'
***************
*** 73,78 ****
remove=rm
! hard_link=ln
! symbolic_link='ln -s'
copy=cp
--- 89,99 ----
remove=rm
! # AmigaDOS specific change. Although we support symbolic links using
! # the GNU tools, they need to be made using the syntax "somewhere:foo/bar"
! # and not "/somewhere/foo/bar", since they must be in standard AmigaDOS
! # format. This should probably be done by having GNU ln translate paths
! # that start with '/' to canonical AmigaDOS device:name form.
! hard_link=cp
! symbolic_link=cp
copy=cp
***************
*** 154,158 ****
;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
! target=`echo $arg | sed 's/-*t[a-z]*=//'`
;;
-build | --build | --buil | --bui | --bu | --b)
--- 175,179 ----
;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
! target=`/bin/echo $arg | sed 's/-*t[a-z]*=//'`
;;
-build | --build | --buil | --bui | --bu | --b)
***************
*** 160,164 ****
;;
-build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
! build=`echo $arg | sed 's/-*b[a-z]*=//'`
;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
--- 181,185 ----
;;
-build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
! build=`/bin/echo $arg | sed 's/-*b[a-z]*=//'`
;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
***************
*** 166,170 ****
;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
! prefix=`echo $arg | sed 's/-*p[a-z]*=//'`
;;
-local-prefix | --local-prefix | --local-prefi | --local-pref | --local-pre \
--- 187,191 ----
;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
! prefix=`/bin/echo $arg | sed 's/-*p[a-z]*=//'`
;;
-local-prefix | --local-prefix | --local-prefi | --local-pref | --local-pre \
***************
*** 175,179 ****
| --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
| --loc=* | --lo=* | --l=*)
! local_prefix=`echo $arg | sed 's/-*l[-a-z]*=//'`
;;
-gxx-include-dir | --gxx-include-dir | --gxx-include \
--- 196,200 ----
| --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
| --loc=* | --lo=* | --l=*)
! local_prefix=`/bin/echo $arg | sed 's/-*l[-a-z]*=//'`
;;
-gxx-include-dir | --gxx-include-dir | --gxx-include \
***************
*** 185,189 ****
| --gxx-incl=* | --gxx-inc=* | --gxx-in=* | --gxx-i=* \
| --gxx-=* | --gxx=* | --gxx=* | --gxx=* | --g=*)
! gxx_include_dir=`echo $arg | sed 's/-*g[-a-z]*=//'`
;;
-exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
--- 206,210 ----
| --gxx-incl=* | --gxx-inc=* | --gxx-in=* | --gxx-i=* \
| --gxx-=* | --gxx=* | --gxx=* | --gxx=* | --g=*)
! gxx_include_dir=`/bin/echo $arg | sed 's/-*g[-a-z]*=//'`
;;
-exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
***************
*** 194,198 ****
| --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* \
| --exe=* | --ex=* | --e=*)
! exec_prefix=`echo $arg | sed 's/-*e[-a-z]*=//'`
;;
-with-gnu-ld | --with-gnu-ld | --with-gnu-l)
--- 215,219 ----
| --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* \
| --exe=* | --ex=* | --e=*)
! exec_prefix=`/bin/echo $arg | sed 's/-*e[-a-z]*=//'`
;;
-with-gnu-ld | --with-gnu-ld | --with-gnu-l)
***************
*** 390,394 ****
# Set this to override the default target model.
target_cpu_default=
! # Set this to force use of install.sh.
broken_install=
# Set this to control which fixincludes program to use.
--- 411,416 ----
# Set this to override the default target model.
target_cpu_default=
! # Set this to force use of install.sh (if set to 'yes')
! # Set to name of installer to use a custom installer.
broken_install=
# Set this to control which fixincludes program to use.
***************
*** 1225,1239 ****
header_files=math-68881.h
;;
m68k-*-lynxos*)
! if [ x$gas = xyes ]
! then
tm_file=m68k/lynx.h
! else
tm_file=m68k/lynx-ng.h
! fi
xm_file=xm-lynx.h
xmake_file=x-lynx
! header_files=math-68881.h
! ;;
m68k-*-netbsd*)
cpu_type=m68k
--- 1247,1271 ----
header_files=math-68881.h
;;
+ m68k-*-amigados)
+ xm_file=m68k/xm-amigados.h
+ out_file=m68k/amigados.c
+ tm_file=m68k/amigados.h
+ tmake_file=m68k/t-amigados
+ xmake_file=m68k/x-amigados
+ fixincludes=Makefile.in # Headers are already fixed.
+ broken_install=cp
+ install_headers_dir=install-headers-cp
+ ;;
m68k-*-lynxos*)
! if [ x$gas = xyes ]
! then
tm_file=m68k/lynx.h
! else
tm_file=m68k/lynx-ng.h
! fi
xm_file=xm-lynx.h
xmake_file=x-lynx
! header_files=math-68881.h
! ;;
m68k-*-netbsd*)
cpu_type=m68k
***************
*** 1242,1258 ****
fixincludes=Makefile.in
xmake_file=x-netbsd
! ;;
m68k-*-sysv3*) # Motorola m68k's running system V.3
xm_file=m68k/xm-m68kv.h
xmake_file=m68k/x-m68kv
! extra_parts="crtbegin.o crtend.o"
! header_files=math-68881.h
! ;;
m68k-*-sysv4*) # Motorola m68k's running system V.4
tm_file=m68k/m68kv4.h
! xm_file=m68k/xm-m68kv.h
tmake_file=t-svr4
! header_files=math-68881.h
! ;;
m88k-dg-dgux*)
case $machine in
--- 1274,1290 ----
fixincludes=Makefile.in
xmake_file=x-netbsd
! ;;
m68k-*-sysv3*) # Motorola m68k's running system V.3
xm_file=m68k/xm-m68kv.h
xmake_file=m68k/x-m68kv
! extra_parts="crtbegin.o crtend.o"
! header_files=math-68881.h
! ;;
m68k-*-sysv4*) # Motorola m68k's running system V.4
tm_file=m68k/m68kv4.h
! xm_file=m68k/xm-m68kv.h
tmake_file=t-svr4
! header_files=math-68881.h
! ;;
m88k-dg-dgux*)
case $machine in
***************
*** 2064,2068 ****
# Also change its value of srcdir.
# Also create a .gdbinit file which runs the one in srcdir
! # and tells GDB to look there for source files.
case $srcdir in
. | ./$subdir | .././$subdir)
--- 2096,2100 ----
# Also change its value of srcdir.
# Also create a .gdbinit file which runs the one in srcdir
! # and tells GDB to look there for source files.
case $srcdir in
. | ./$subdir | .././$subdir)
***************
*** 2111,2116 ****
else
rm -f Makefile.xx
! abssrcdir=`cd ${srcdir}; pwd`
! sed "s|^INSTALL = .*|INSTALL = ${abssrcdir}/install.sh -c|" Makefile.tem > Makefile.xx
rm -f Makefile.tem
mv Makefile.xx Makefile.tem
--- 2143,2154 ----
else
rm -f Makefile.xx
! if [ x$host_broken_install = xyes ]
! then
! abssrcdir=`cd ${srcdir}; pwd`
! installer=${abssrcdir}/install.sh -c
! else
! installer=$host_broken_install
! fi
! sed "s|^INSTALL = .*|INSTALL = ${installer}|" Makefile.tem > Makefile.xx
rm -f Makefile.tem
mv Makefile.xx Makefile.tem
***************
*** 2331,2338 ****
if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
then
! sed -e 's,CC=set-by-configure,CC=$(CC),' \
Makefile.tem > Makefile.xx
else
! sed -e "s,CC=set-by-configure,CC=\`case '$(CC)' in stage*) echo '$(CC)' | sed -e 's|stage|../stage|g';; *) echo '$(CC)';; esac\`," \
Makefile.tem > Makefile.xx
fi
--- 2369,2376 ----
if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
then
! sed -e 's,CC=set-by-configure,CC=\$(CC),' \
Makefile.tem > Makefile.xx
else
! sed -e "s,CC=set-by-configure,CC=\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`," \
Makefile.tem > Makefile.xx
fi
***************
*** 2412,2415 ****
--- 2450,2467 ----
# If a subdirectory has a configure script, run it.
+ if [ x$subdir != x. ]
+ then
+ if [ -f $srcdir/configure ]
+ then
+ ${CONFIG_SHELL-sh} $srcdir/configure $arguments --srcdir=$srcdir
+ fi
+ fi
+
+ if [ xx${vint} != xx ]
+ then
+ vintmsg=" (vint)"
+ fi
+
+ # If a subdirectory has a configure script, run it.
if [ x$subdir != x. ]
then
diff -2rcN gcc-2.6.1/final.c gcc-2.6.1-amiga/final.c
*** gcc-2.6.1/final.c Wed Sep 21 01:05:03 1994
--- gcc-2.6.1-amiga/final.c Fri Nov 4 11:02:46 1994
***************
*** 2022,2025 ****
--- 2022,2029 ----
if (write_symbols != NO_DEBUG)
{
+ /* Phil.B: 03-Oct-94 added q_anote from albaugh@agames.com (Mike Albaugh) */
+ #if defined(amigados) && defined(ASM_NOTE_SOURCE_LINE)
+ ASM_NOTE_SOURCE_LINE(file,last_linenum,filename);
+ #endif
#ifdef SDB_DEBUGGING_INFO
if (write_symbols == SDB_DEBUG
diff -2rcN gcc-2.6.1/gcc.c gcc-2.6.1-amiga/gcc.c
*** gcc-2.6.1/gcc.c Thu Oct 27 22:49:58 1994
--- gcc-2.6.1-amiga/gcc.c Fri Nov 4 11:02:48 1994
***************
*** 208,211 ****
--- 208,216 ----
static int save_temps_flag;
+ #ifdef amigados
+ /* Phil.B: 03-Oct-94 Flag indicating process priority */
+ static int amiga_priority = 0;
+ #endif /* amigados */
+
/* The compiler version. */
***************
*** 837,840 ****
--- 842,849 ----
{"--pipe", "-pipe", 0},
{"--prefix", "-B", "a"},
+ /* Phil.B: 03-Oct-94, allow priority settings for all programs started by gcc */
+ #ifdef amigados
+ {"--priority", "-P", "a"},
+ #endif /* amigados */
{"--preprocess", "-E", 0},
{"--print-file-name", "-print-file-name=", "aj"},
***************
*** 928,932 ****
arg = argv[i] + optlen + 1;
! /* If this mapping requires extra text at end of name,
accept that as "argument". */
else if (index (arginfo, '*') != 0)
--- 937,941 ----
arg = argv[i] + optlen + 1;
! /* If this mapping allows extra text at end of name,
accept that as "argument". */
else if (index (arginfo, '*') != 0)
***************
*** 985,990 ****
}
i++;
- }
/* Handle old-fashioned options--just copy them through,
with their arguments. */
--- 994,999 ----
}
i++;
+ }
/* Handle old-fashioned options--just copy them through,
with their arguments. */
***************
*** 1340,1348 ****
#ifndef STANDARD_EXEC_PREFIX
! #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/"
#endif /* !defined STANDARD_EXEC_PREFIX */
static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
! static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
#ifdef MD_EXEC_PREFIX
static char *md_exec_prefix = MD_EXEC_PREFIX;
--- 1349,1357 ----
#ifndef STANDARD_EXEC_PREFIX
! #define STANDARD_EXEC_PREFIX "/gnu/lib/gcc-lib/"
#endif /* !defined STANDARD_EXEC_PREFIX */
static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
! static char *standard_exec_prefix_1 = "/local/lib/gcc-lib/";
#ifdef MD_EXEC_PREFIX
static char *md_exec_prefix = MD_EXEC_PREFIX;
***************
*** 1350,1354 ****
#ifndef STANDARD_STARTFILE_PREFIX
! #define STANDARD_STARTFILE_PREFIX "/usr/local/lib/"
#endif /* !defined STANDARD_STARTFILE_PREFIX */
--- 1359,1363 ----
#ifndef STANDARD_STARTFILE_PREFIX
! #define STANDARD_STARTFILE_PREFIX "/gnu/lib/"
#endif /* !defined STANDARD_STARTFILE_PREFIX */
***************
*** 1360,1368 ****
#endif
static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
! static char *standard_startfile_prefix_1 = "/lib/";
! static char *standard_startfile_prefix_2 = "/usr/lib/";
#ifndef TOOLDIR_BASE_PREFIX
! #define TOOLDIR_BASE_PREFIX "/usr/local/"
#endif
static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
--- 1369,1377 ----
#endif
static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
! static char *standard_startfile_prefix_1 = "/local/lib/";
! static char *standard_startfile_prefix_2 = "/local/lib/";
#ifndef TOOLDIR_BASE_PREFIX
! #define TOOLDIR_BASE_PREFIX "/local/"
#endif
static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
***************
*** 1565,1568 ****
--- 1574,1581 ----
#endif
+ #ifdef amigados
+ if (!base) /* No env var set */
+ base = "RAM:";
+ #else
base = choose_temp_base_try (concat4 (dir_separator_str, "usr",
dir_separator_str, "tmp"),
***************
*** 1570,1573 ****
--- 1583,1588 ----
base = choose_temp_base_try (concat (dir_separator_str, "tmp"), base);
+ #endif
+
/* If all else fails, use the current directory! */
if (base == (char *)0) base = concat(".", dir_separator_str);
***************
*** 1578,1582 ****
strcpy (temp_filename, base);
if (len > 0 && temp_filename[len-1] != '/'
! && temp_filename[len-1] != DIR_SEPARATOR)
temp_filename[len++] = DIR_SEPARATOR;
strcpy (temp_filename + len, "ccXXXXXX");
--- 1593,1601 ----
strcpy (temp_filename, base);
if (len > 0 && temp_filename[len-1] != '/'
! && temp_filename[len-1] != DIR_SEPARATOR
! #ifdef amigados
! && temp_filename[len-1] != ':'
! #endif
! )
temp_filename[len++] = DIR_SEPARATOR;
strcpy (temp_filename + len, "ccXXXXXX");
***************
*** 1723,1727 ****
/* Determine the filename to execute (special case for absolute paths). */
! if (*name == '/' || *name == DIR_SEPARATOR)
{
if (access (name, mode))
--- 1742,1750 ----
/* Determine the filename to execute (special case for absolute paths). */
! if (*name == '/' || *name == DIR_SEPARATOR
! #ifdef amigados
! || index (name, ':')
! #endif
! )
{
if (access (name, mode))
***************
*** 1943,1946 ****
--- 1966,1970 ----
(i.e. its output should be piped to the next one.) */
+ #ifndef PEXECUTE
#ifdef __MSDOS__
***************
*** 2144,2149 ****
return (search_flag ? spawnv : spawnvp) (1, program, FIX_ARGV (argv));
}
! #endif /* OS2 or WINNT */
!
/* Execute the command specified by the arguments on the current line of spec.
--- 2168,2173 ----
return (search_flag ? spawnv : spawnvp) (1, program, FIX_ARGV (argv));
}
! #endif /* not OS2 or WINNT*/
! #endif /* !defined (PEXECUTE) */
/* Execute the command specified by the arguments on the current line of spec.
***************
*** 2240,2246 ****
--- 2264,2276 ----
char *string = commands[i].argv[0];
+ #ifdef PEXECUTE
+ commands[i].pid = PEXECUTE (string != commands[i].prog,
+ string, commands[i].argv,
+ i + 1 < n_commands);
+ #else
commands[i].pid = pexecute (string != commands[i].prog,
string, commands[i].argv,
i + 1 < n_commands);
+ #endif
if (string != commands[i].prog)
***************
*** 2263,2266 ****
--- 2293,2299 ----
char *prog = "unknown";
+ #ifdef PEXECUTE_RESULT
+ pid = PEXECUTE_RESULT (status, commands[i]);
+ #else /* PEXECUTE_RESULT */
#ifdef __MSDOS__
status = pid = commands[i].pid;
***************
*** 2269,2275 ****
--- 2302,2310 ----
pid = cwait (&status, commands[i].pid, WAIT_CHILD);
#else
+
pid = wait (&status);
#endif
#endif
+ #endif /* PEXECUTE_RESULT */
if (pid < 0)
abort ();
***************
*** 2390,2393 ****
--- 2425,2429 ----
{
strncpy (nstore, startp, endp-startp);
+ #ifndef amigados
if (endp == startp)
strcpy (nstore, concat (".", dir_separator_str));
***************
*** 2399,2402 ****
--- 2435,2447 ----
else
nstore[endp-startp] = 0;
+ #else
+ if (endp[-1] != '/' && endp[-1] != ':')
+ {
+ nstore[endp-startp] = '/';
+ nstore[endp-startp+1] = 0;
+ }
+ else
+ nstore[endp-startp] = 0;
+ #endif
add_prefix (&exec_prefixes, nstore, 0, 0, NULL_PTR);
if (*endp == 0)
***************
*** 2421,2424 ****
--- 2466,2470 ----
{
strncpy (nstore, startp, endp-startp);
+ #ifndef amigados
if (endp == startp)
strcpy (nstore, concat (".", dir_separator_str));
***************
*** 2430,2433 ****
--- 2476,2488 ----
else
nstore[endp-startp] = 0;
+ #else
+ if (endp[-1] != '/' && endp[-1] != ':')
+ {
+ nstore[endp-startp] = '/';
+ nstore[endp-startp+1] = 0;
+ }
+ else
+ nstore[endp-startp] = 0;
+ #endif
add_prefix (&startfile_prefixes, nstore, 0, 0, NULL_PTR);
if (*endp == 0)
***************
*** 2453,2460 ****
{
strncpy (nstore, startp, endp-startp);
if (endp == startp)
strcpy (nstore, concat (".", dir_separator_str));
else if (endp[-1] != '/' && endp[-1] != DIR_SEPARATOR)
! {
nstore[endp-startp] = DIR_SEPARATOR;
nstore[endp-startp+1] = 0;
--- 2508,2516 ----
{
strncpy (nstore, startp, endp-startp);
+ #ifndef amigados
if (endp == startp)
strcpy (nstore, concat (".", dir_separator_str));
else if (endp[-1] != '/' && endp[-1] != DIR_SEPARATOR)
! {
nstore[endp-startp] = DIR_SEPARATOR;
nstore[endp-startp+1] = 0;
***************
*** 2462,2465 ****
--- 2518,2530 ----
else
nstore[endp-startp] = 0;
+ #else
+ if (endp[-1] != '/' && endp[-1] != ':')
+ {
+ nstore[endp-startp] = '/';
+ nstore[endp-startp+1] = 0;
+ }
+ else
+ nstore[endp-startp] = 0;
+ #endif
add_prefix (&startfile_prefixes, nstore, 0, 0, NULL_PTR);
if (*endp == 0)
***************
*** 2481,2484 ****
--- 2546,2559 ----
for (i = 1; i < argc; i++)
{
+ #ifdef amigados
+ /* Phil.B 03-Oct-94 added -priority keyword */
+ if (! strcmp (argv[i], "-priority"))
+ {
+ if (i + 1 == argc)
+ fatal ("argument to `-priority' is missing");
+ amiga_priority = atoi(argv[++i]);
+ }
+ else
+ #endif /* amigados */
if (! strcmp (argv[i], "-dumpspecs"))
{
***************
*** 2658,2661 ****
--- 2733,2747 ----
break;
+ #ifdef amigados
+ case 'P': /* Phil.B 03-Oct-94 added -priority keyword */
+ if (p[1] == 0 && i + 1 == argc)
+ fatal ("argument to `-P' is missing");
+ if (p[1] == 0)
+ amiga_priority = atoi(argv[++i]);
+ else
+ amiga_priority = atoi((char *)(p + 1));
+ break;
+ #endif /* amigados */
+
case 'v': /* Print our subcommands and print versions. */
n_switches++;
***************
*** 2746,2753 ****
add_prefix (&exec_prefixes,
concat3 (tooldir_prefix, "bin", dir_separator_str),
! 0, 0, NULL_PTR);
add_prefix (&startfile_prefixes,
concat3 (tooldir_prefix, "lib", dir_separator_str),
! 0, 0, NULL_PTR);
/* More prefixes are enabled in main, after we read the specs file
--- 2832,2839 ----
add_prefix (&exec_prefixes,
concat3 (tooldir_prefix, "bin", dir_separator_str),
! 0, 0, NULL_PTR);
add_prefix (&startfile_prefixes,
concat3 (tooldir_prefix, "lib", dir_separator_str),
! 0, 0, NULL_PTR);
/* More prefixes are enabled in main, after we read the specs file
***************
*** 2830,2834 ****
register int c = *p;
! if (c == 'B' || c == 'b' || c == 'V')
{
/* Skip a separate arg, if any. */
--- 2916,2925 ----
register int c = *p;
! /* Phil.B: 05-Oct-94 added support for '-P' */
! if (c == 'B' || c == 'b' || c == 'V'
! #ifdef amigados
! || c == 'P'
! #endif /* amigdos */
! )
{
/* Skip a separate arg, if any. */
***************
*** 4398,4405 ****
--- 4489,4500 ----
int len;
+ #ifdef FILE_NAME_NONDIRECTORY
+ input_basename = FILE_NAME_NONDIRECTORY (input_filename);
+ #else
input_basename = input_filename;
for (p = input_filename; *p; p++)
if (*p == '/' || *p == DIR_SEPARATOR)
input_basename = p + 1;
+ #endif
/* Find a suffix starting with the last period,
***************
*** 4613,4628 ****
}
! /* Return a newly-allocated string whose contents concatenate those of s1, s2 */
! static char *
concat (s1, s2)
char *s1, *s2;
! {
int len1 = strlen (s1);
int len2 = strlen (s2);
char *result = xmalloc (len1 + len2 + 1);
!
! strcpy (result, s1);
! strcpy (result + len1, s2);
*(result + len1 + len2) = 0;
--- 4708,4723 ----
}
! /* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */
! static char *
concat (s1, s2)
char *s1, *s2;
! {
int len1 = strlen (s1);
int len2 = strlen (s2);
char *result = xmalloc (len1 + len2 + 1);
!
! strcpy (result, s1);
! strcpy (result + len1, s2);
*(result + len1 + len2) = 0;
diff -2rcN gcc-2.6.1/genconfig.c gcc-2.6.1-amiga/genconfig.c
*** gcc-2.6.1/genconfig.c Wed Jun 15 08:37:01 1994
--- gcc-2.6.1-amiga/genconfig.c Fri Nov 4 11:02:48 1994
***************
*** 304,309 ****
--- 304,317 ----
from the machine description file `md'. */\n\n");
+ #ifdef amigados
+ /* this constant probably better be 14 in general, or a cross compiling
+ host might choke on some amigados header files... */
+
+ /* Allow at least 14 operands for the sake of asm constructs. */
+ max_recog_operands = 14;
+ #else
/* Allow at least 10 operands for the sake of asm constructs. */
max_recog_operands = 9; /* We will add 1 later. */
+ #endif
max_dup_operands = 1;
diff -2rcN gcc-2.6.1/ginclude/stdarg.h gcc-2.6.1-amiga/ginclude/stdarg.h
*** gcc-2.6.1/ginclude/stdarg.h Sat Jul 9 03:04:27 1994
--- gcc-2.6.1-amiga/ginclude/stdarg.h Fri Nov 4 11:02:49 1994
***************
*** 157,159 ****
--- 157,167 ----
#endif /* not _ANSI_STDARG_H_ */
+
+ #ifdef amigados
+ # ifndef _VA_LIST
+ # define _VA_LIST
+ typedef __gnuc_va_list va_list;
+ # endif
+ #endif /* amigados */
+
#endif /* not _STDARG_H */
diff -2rcN gcc-2.6.1/ginclude/stddef.h gcc-2.6.1-amiga/ginclude/stddef.h
*** gcc-2.6.1/ginclude/stddef.h Fri Oct 7 23:22:35 1994
--- gcc-2.6.1-amiga/ginclude/stddef.h Fri Nov 4 11:02:49 1994
***************
*** 4,7 ****
--- 4,47 ----
#ifndef __STDDEF_H__
+ #ifdef amigados
+
+ /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that
+ just as well. The system headers are ANSI compliant, the used compiler IS
+ gcc, so it's really ok to use the system header, no reason to hassle
+ with a jungle of ifdefs. Besides, amigados is only defined if compiling
+ with host=amigados, it doesn't apply if compiling with target=amigados
+ on a different host with possibly different system headers. Same thing
+ would apply to gstdarg.h and gvarargs.h, but those headers are more
+ easily fixable than this one and I'm sick of writing the same comment
+ there as well. MW
+
+ Include the contents of <stddef.h> inline rather than with a #include,
+ to avoid infinite include recursion when this file is installed in
+ gcc's include directory as stddef.h. (fnf) */
+
+ #define _STDDEF_H_
+
+ #include <machine/ansi.h>
+
+ typedef _PTRDIFF_T_ ptrdiff_t;
+
+ #ifdef _SIZE_T_
+ typedef _SIZE_T_ size_t;
+ #undef _SIZE_T_
+ #endif
+
+ #ifdef _WCHAR_T_
+ typedef _WCHAR_T_ wchar_t;
+ #undef _WCHAR_T_
+ #endif
+
+ #ifndef NULL
+ #define NULL 0
+ #endif
+
+ #define offsetof(type, member) ((size_t)(&((type *)0)->member))
+
+ #else /* not amigados */
+
/* Any one of these symbols __need_* means that GNU libc
wants us just to define one data type. So don't define
***************
*** 202,205 ****
--- 242,247 ----
#define __WCHAR_TYPE__ int
#endif
+
+ #endif /* not amigados */
typedef __WCHAR_TYPE__ wchar_t;
#endif
diff -2rcN gcc-2.6.1/ginclude/varargs.h gcc-2.6.1-amiga/ginclude/varargs.h
*** gcc-2.6.1/ginclude/varargs.h Sat Jul 9 03:04:32 1994
--- gcc-2.6.1-amiga/ginclude/varargs.h Fri Nov 4 11:02:50 1994
***************
*** 174,175 ****
--- 174,182 ----
#undef _BSD_VA_LIST
#endif
+
+ #ifdef amigados
+ # ifndef _VA_LIST
+ # define _VA_LIST
+ typedef __gnuc_va_list va_list;
+ # endif
+ #endif /* amigados */
diff -2rcN gcc-2.6.1/protoize.c gcc-2.6.1-amiga/protoize.c
*** gcc-2.6.1/protoize.c Wed Oct 5 03:17:40 1994
--- gcc-2.6.1-amiga/protoize.c Fri Nov 4 11:02:51 1994
***************
*** 843,848 ****
--- 843,853 ----
struct default_include *p;
+ #ifdef FILE_NAME_ABSOLUTE_P
+ if (! FILE_NAME_ABSOLUTE_P (path))
+ abort ();
+ #else
if (path[0] != '/')
abort (); /* Must be an absolutized filename. */
+ #endif
for (p = include_defaults; p->fname; p++)
***************
*** 1271,1275 ****
--- 1276,1284 ----
const char *src_p;
+ #ifdef FILE_NAME_ABSOLUTE_P
+ if (! FILE_NAME_ABSOLUTE_P (rel_filename))
+ #else
if (rel_filename[0] != '/')
+ #endif
{
src_p = cwd2;
***************
*** 1534,1537 ****
--- 1543,1565 ----
}
+ /* Use this macro to advance a char * over the filename part in a line
+ read from an aux-info file. */
+
+ #ifndef amigados
+ /* Version for file systems where the colon has no special meaning */
+ #define ADVANCE_PAST_FILENAME(CP) \
+ while (* (CP) != ':') (CP)++
+ #else
+ /* Have to heuristically decide whether the colon is part of the filename
+ or whether it serves to delimit the filename from the line number. If
+ it's the latter case, then the character following the colon *must*
+ be a digit. Note that this heuristic fails if the filename starts
+ with a digit. */
+ #define ADVANCE_PAST_FILENAME(CP) \
+ while ((CP)[0] != ':' || !isdigit ((CP)[1])) \
+ (CP)++;
+ #endif
+
+
/* Given a line from an aux info file, and a time at which the aux info
file it came from was created, check to see if the item described in
***************
*** 1555,1560 ****
const char *filename_start = p = l + 3;
! while (*p != ':')
! p++;
filename = (char *) alloca ((size_t) (p - filename_start) + 1);
strncpy (filename, filename_start, (size_t) (p - filename_start));
--- 1583,1587 ----
const char *filename_start = p = l + 3;
! ADVANCE_PAST_FILENAME (p);
filename = (char *) alloca ((size_t) (p - filename_start) + 1);
strncpy (filename, filename_start, (size_t) (p - filename_start));
***************
*** 1613,1618 ****
char *filename;
! while (*p != ':')
! p++;
filename = (char *) alloca ((size_t) (p - filename_start) + 1);
strncpy (filename, filename_start, (size_t) (p - filename_start));
--- 1640,1644 ----
char *filename;
! ADVANCE_PAST_FILENAME (p);
filename = (char *) alloca ((size_t) (p - filename_start) + 1);
strncpy (filename, filename_start, (size_t) (p - filename_start));
***************
*** 2334,2338 ****
char *p = aux_info_base;
! while (*p != ':')
p++;
p++;
--- 2360,2366 ----
char *p = aux_info_base;
! /* have to make sure at least one space is following the colon to make
! sure the colon is not part of the filename */
! while (*p != ':' && p[1] != ' ')
p++;
p++;
***************
*** 2348,2352 ****
aux_info_second_line = p;
aux_info_relocated_name = 0;
! if (invocation_filename[0] != '/')
{
/* INVOCATION_FILENAME is relative;
--- 2376,2384 ----
aux_info_second_line = p;
aux_info_relocated_name = 0;
! #ifdef FILE_NAME_ABSOLUTE_P
! if (! FILE_NAME_ABSOLUTE_P (invocation_filename))
! #else
! if (invocation_filename[0] != '/')
! #endif
{
/* INVOCATION_FILENAME is relative;
***************
*** 2437,2441 ****
/* Check an individual filename for a .c suffix. If the filename has this
! suffix, rename the file such that its suffix is changed to .C. This
function implements the -C option. */
--- 2469,2473 ----
/* Check an individual filename for a .c suffix. If the filename has this
! suffix, rename the file such that its suffix is changed to .cc. This
function implements the -C option. */
***************
*** 2446,2450 ****
const char *filename = hp->symbol;
int last_char_index = strlen (filename) - 1;
! char *const new_filename = (char *) alloca (strlen (filename) + 1);
/* Note that we don't care here if the given file was converted or not. It
--- 2478,2482 ----
const char *filename = hp->symbol;
int last_char_index = strlen (filename) - 1;
! char *const new_filename = (char *) alloca (strlen (filename) + 2);
/* Note that we don't care here if the given file was converted or not. It
***************
*** 2458,2463 ****
strcpy (new_filename, filename);
! new_filename[last_char_index] = 'C';
if (my_link (filename, new_filename) == -1)
{
--- 2490,2512 ----
strcpy (new_filename, filename);
! strcat (new_filename + last_char_index, "cc");
!
! /* use rename(2) if available !! Update config files to include HAVE_rename
! if the used OS provides it. Advantages are: it's atomic, it's one
! system call compared to two. */
!
! #ifdef HAVE_rename
! /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has
! to be changed to `my_rename' as well. */
+ if (rename (filename, new_filename) == -1)
+ {
+ fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n",
+ pname, shortpath (NULL, filename),
+ shortpath (NULL, new_filename), sys_errlist[errno]);
+ errors++;
+ return;
+ }
+ #else
if (my_link (filename, new_filename) == -1)
{
***************
*** 2476,2479 ****
--- 2525,2529 ----
return;
}
+ #endif
}
diff -2rcN gcc-2.6.1/real.c gcc-2.6.1-amiga/real.c
*** gcc-2.6.1/real.c Tue Jun 28 10:13:52 1994
--- gcc-2.6.1-amiga/real.c Fri Nov 4 11:02:52 1994
***************
*** 4280,4286 ****
--- 4280,4292 ----
{
if (sign)
+ #ifdef amigados
sprintf (wstring, " -Infinity ");
else
sprintf (wstring, " Infinity ");
+ #else
+ sprintf (wstring, " -NaN ");
+ else
+ sprintf (wstring, " NaN ");
+ #endif
goto bxit;
}
diff -2rcN gcc-2.6.1/scan-types.sh gcc-2.6.1-amiga/scan-types.sh
*** gcc-2.6.1/scan-types.sh Mon Apr 18 08:07:12 1994
--- gcc-2.6.1-amiga/scan-types.sh Fri Nov 4 11:02:52 1994
***************
*** 1,3 ****
! #! /bin/sh
# Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
# Emits macros definitions for these, and some other types.
--- 1,3 ----
! #!/bin/sh
# Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
# Emits macros definitions for these, and some other types.
diff -2rcN gcc-2.6.1/toplev.c gcc-2.6.1-amiga/toplev.c
*** gcc-2.6.1/toplev.c Tue Oct 25 20:09:12 1994
--- gcc-2.6.1-amiga/toplev.c Fri Nov 4 11:02:53 1994
***************
*** 136,139 ****
--- 136,150 ----
static char *decl_name ();
+ #ifdef amigados
+ /* Phil.B: 03-Oct-94 Flag indicating process priority */
+ static int amiga_priority = -1;
+ /* Handle new stack allocating */
+ #include <proto/exec.h>
+ struct Task *amiga_task;
+ struct StackSwapStruct oldstack, newstack;
+ long amiga_stksize = 50000;
+ int amiga_newstack = FALSE;
+ #endif /* amigados */
+
/* Name of program invoked, sans directories. */
***************
*** 531,534 ****
--- 542,546 ----
{"writable-strings", &flag_writable_strings, 1},
{"peephole", &flag_no_peephole, 0},
+ {"large-baserel", &flag_pic, 4},
{"force-mem", &flag_force_mem, 1},
{"force-addr", &flag_force_addr, 1},
***************
*** 549,552 ****
--- 561,565 ----
{"pic", &flag_pic, 1},
{"PIC", &flag_pic, 2},
+ {"baserel", &flag_pic, 3},
{"fast-math", &flag_fast_math, 1},
{"common", &flag_no_common, 0},
***************
*** 1967,1970 ****
--- 1980,1986 ----
char *input_name;
{
+ #ifdef FILE_NAME_NONDIRECTORY
+ char *na = FILE_NAME_NONDIRECTORY (input_name);
+ #else
int len = strlen (input_name);
char *na = input_name + len;
***************
*** 1977,1980 ****
--- 1993,1997 ----
na--;
}
+ #endif
#ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
***************
*** 3369,3372 ****
--- 3386,3398 ----
#endif /* RLIMIT_STACK */
+ #ifdef amigados
+ {
+ char *envstr;
+
+ if (envstr = getenv("GCCSTACK"))
+ if ((i = atoi(envstr)) > amiga_stksize) amiga_stksize = i;
+ }
+ #endif /* amigados */
+
signal (SIGFPE, float_signal);
***************
*** 3613,3616 ****
--- 3639,3667 ----
else if (!strcmp (str, "pedantic-errors"))
flag_pedantic_errors = pedantic = 1;
+ #ifdef amigados
+ else if (!strcmp (str, "priority"))
+ {
+ char *p = str + 1;
+
+ if (*p)
+ amiga_priority = atoi (p);
+ if (amiga_priority < -25)
+ amiga_priority = -25;
+ else if (amiga_priority > 25)
+ amiga_priority = 25;
+ }
+ #if 0
+ else if (!strcmp (str, "stacksize"))
+ {
+ char *p = str + 1;
+ long size;
+
+ if (*p)
+ size = atoi (p);
+ if ((size > 0) && (size > amiga_stksize))
+ amiga_stksize = size;
+ }
+ #endif
+ #endif /* amigados */
else if (!strcmp (str, "quiet"))
quiet_flag = 1;
***************
*** 3862,3865 ****
--- 3913,3946 ----
}
+ #ifdef amigados
+ Forbid();
+ amiga_task = FindTask(NULL);
+ oldstack.stk_Lower = amiga_task->tc_SPLower;
+ oldstack.stk_Upper = amiga_task->tc_SPUpper;
+ oldstack.stk_Pointer = amiga_task->tc_SPReg;
+ newstack.stk_Lower = (APTR)((long)oldstack.stk_Upper - (long)oldstack.stk_Lower);
+ Permit();
+ SetTaskPri(amiga_task, amiga_priority);
+ /* Allocate new stack (50000 default). First check if new stack > existing
+ stacksize */
+ amiga_newstack = FALSE;
+ #if 0
+ if ((long)newstack.stk_Lower < amiga_stksize) {
+ Forbid();
+ if (newstack.stk_Lower = (APTR)malloc(amiga_stksize)) {
+ long stk_offset = (long)oldstack.stk_Upper - (long)oldstack.stk_Pointer;
+
+ amiga_newstack = TRUE;
+ newstack.stk_Upper = (APTR)((long)newstack.stk_Lower + amiga_stksize);
+ newstack.stk_Pointer = (APTR)((long)newstack.stk_Upper - stk_offset);
+ bcopy(oldstack.stk_Pointer, newstack.stk_Pointer, stk_offset);
+ StackSwap(&newstack);
+ } else
+ error("Can't allocate new %ld stack", amiga_stksize);
+ Permit();
+ }
+ #endif
+ #endif /* amigados */
+
/* Initialize for bytecode output. A good idea to do this as soon as
possible after the "-f" options have been parsed. */
***************
*** 3948,3952 ****
compile_file (filename);
! #if !defined(OS2) && !defined(VMS) && !defined(WINNT)
if (flag_print_mem)
{
--- 4029,4033 ----
compile_file (filename);
! #if !defined(OS2) && !defined(VMS) && !defined(WINNT) && !defined(amigados)
if (flag_print_mem)
{
***************
*** 3966,3970 ****
#endif /* not USG */
}
! #endif /* not OS2 and not VMS and not WINNT */
if (errorcount)
--- 4047,4060 ----
#endif /* not USG */
}
! #endif /* not OS2 and not VMS and not WINNT and not amigados*/
!
! #if 0
! if (amiga_newstack) {
! Forbid();
! StackSwap(&newstack);
! free(newstack.stk_Lower);
! Permit();
! }
! #endif
if (errorcount)
diff -2rcN gcc-2.6.1/version.c gcc-2.6.1-amiga/version.c
*** gcc-2.6.1/version.c Sun Oct 30 13:05:06 1994
--- gcc-2.6.1-amiga/version.c Fri Nov 4 11:02:54 1994
***************
*** 1 ****
--- 1,2 ----
char *version_string = "2.6.1";
+ char VERSION[]="$VER:gcc 2.6.1 last compiled on "__DATE__" "__TIME__;